On Friday, 17 June 2016 at 04:32:02 UTC, Adam D. Ruppe wrote:
On Friday, 17 June 2016 at 01:51:41 UTC, Joerg Joergonson wrote:
Are you keeping multiple buffers of the image around? A
trueimage, a memoryimage, an opengl texture
MemoryImage and TrueImage are the same thing, memory is just
the interface, true image is the implementation.
OpenGL texture is separate, but it references the same memory
as a TrueColorImage, so it wouldn't be adding.
ok, then it's somewhere in TrueColorImage or the loading of the
png.
You might have pinned temporary buffers though. That shouldn't
happen on 64 bit, but on 32 bit I have seen it happen a lot.
Ok, IIRC LDC both x64 and x86 had high memory usage too, so if it
shouldn't happen on 64-bit(if it applies to ldc), this then is
not the problem. I'll run a -vgc on it and see if it shows up
anything interesting.
When I do a bare loop minimum project(create2dwindow + event
handler) I get 13% cpu(on 8-core skylake 4ghz) and 14MB memory.
I haven't seen that here.... but I have a theory now: you have
some pinned temporary buffer on 32 bit (on 64 bit, the GC would
actually clean it up) that keeps memory usage near the
collection boundary.
Again, it might be true but I'm pretty sure I saw the problem
with ldc x64.
Then, a small allocation in the loop - which shouldn't be
happening, I don't see any in here... - but if there is a small
allocation I'm missing, it could be triggering a GC collection
cycle each time, eating CPU to scan all that wasted memory
without being able to free anything.
Ok, Maybe... -vgc might show that.
If you can run it in the debugger and just see where it is by
breaking at random, you might be able to prove it.
Good idea, not thought about doing that ;) Might be a crap shoot
but who knows...
That's a possible theory.... I can reproduce the memory usage
here, but not the CPU usage though. Sitting idle, it is always
<1% here (0 if doing nothing, like 0.5% if I move the mouse in
the window to generate some activity)
I need to get to bed though, we'll have to check this out in
more detail later.
me too ;) I'll try to test stuff out a little more when I get a
chance.
Thanks! Also, when I try to run the app in 64-bit windows,
RegisterClassW throws for some reason ;/ I haven't been able
to figure that one out yet ;/
errrrrr this is a mystery to me too... a hello world on 64 bit
seems to work fine, but your program tells me error 998
(invalid memory access) when I run it. WTF, both register class
the same way.
I'm kinda lost on that.
Well, It works on LDC x64! again ;) This seems like an issue with
DMD x64? I was thinking maybe it has to do the layout of the
struct or something, but not sure.
---
I just run a quick test:
LDC x64 uses about 250MB and 13% cpu.
I couldn't check on x86 because of the error
phobos2-ldc.lib(gzlib.c.obj) : fatal error LNK1112: module
machine type 'x64' conflicts with target machine type 'X86'
not sure what that means with gzlib.c.ojb. Must be another bug in
ldc alpha ;/
Anyways, We'll figure it all out at some point ;) I'm really
liking your lib by the way. It's let me build a gui and get a lot
done and just "work". Not sure if it will work on X11 with just a
recompile, but I hope ;)