justinstenning / Direct3DHook

DirectX Capture and Overlays by using Direct3D API hooks
http://spazzarama.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks
MIT License
580 stars 178 forks source link

Memory leak on screenshot #78

Open koperamichal opened 2 years ago

koperamichal commented 2 years ago

Hello, it seems there are some memory leak issues again. I downloaded and built TestScreenshot sample, injected to Direct3D 11 game, captured 1000 images and it caused ~200MB memory leak in target process. I tested it with 3 different games in windowed mode on Win10 10.0.19043 Build 19043.

justinstenning commented 2 years ago

I’ll check it out, sounds like the images aren’t being released OR it is just a bit of lag for the GC, have you made any changes at all or just using the codebase unchanged

koperamichal commented 2 years ago

I didn't do any changes to be sure there is no problem with my code. And I found that leak because one game took 29+GB RAM, so you could exclude GC lag.

Lakritzator commented 2 years ago

I had a quick run through the code, didn't find a lot.

But I'm sure that created font here, stored in a TextElement, is not disposed: https://github.com/justinstenning/Direct3DHook/blob/master/TestScreenshot/Form1.cs#L268 But I do not know the project well enough to know if there are many such objects created.

koperamichal commented 2 years ago

I'm sure that font is not a issue. Problem is the leak in target process not in Test application. I tried to run it on my old computer with Win7 a there was not issue there. It might be related to win10, drivers, hooks etc. I tested only games created by Unity, so there might be problem too.

justinstenning commented 1 year ago

@koperamichal I've looked into this quite extensively and it is definitely a problem but I can't seem to determine what is causing this exactly - I think you might be right about some driver related bits with D3D.

I did find a couple of minor leaks related to .NET remoting (leases being held, I'm looking forward to removing that in favour of a shared memory technique). I'll do some more checks and will leave this open for now.