-
Notifications
You must be signed in to change notification settings - Fork 186
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multiple screen captures in a loop cause explorer.exe and native Windows app to lag? #122
Comments
The GraphicsCaptureItems are backed by shell objects, it's conceivable that there's an issue that has down stream effects on explorer. But I haven't seen this reported. It would be interesting to know whether keeping the GraphicsCaptureItems around instead of creating new ones mitigates the issue at all. I'll see if I can repro when I get some time. |
I'll try to implement your suggestion, creating a single instance of GraphicsCaptureItems per window and keeping those in memory instead of recreating an item on every iteration. Kind of hard to debug as this issue might take hours to reproduce, can't pinpoint it yet... Thanks |
@robmikh GraphicsCaptureItem item = CaptureHelper.CreateItemForWindow(client.WindowHandler); Every 100ms to speed up the process. After a few minutes, my Windows Start menu is completely bugged, sometimes works, and sometimes takes 15 seconds to open. Closing my App doesn't fix the issue as I mentioned before, a restart of the PC is required. edit - |
@robmikh It's not as bad but the issue still occurs. So basically I can't see a workaround that lets me use this API without telling my users they need to restart their explorer.exe every 24h ><" Please let me know if you can think of a hotfix/workaround that I might be able to upload until a fix is provided. |
I think I'm able to repro, but just to be sure can you try running this code and see if it reproduces your issue after a few minutes? https://github.com/robmikh/manyitemstest You'll need to use CTRL+C to exit it. |
@robmikh |
Does this also explain why the last test I did (5 instances without recreating) also caused explorer.exe to lag after a while? |
Not sure yet, I'll have to debug it on Monday. |
Hey Rob, So that I can plan ahead and understand if I can wait for a fix or if I have to develop a fix with the old capture approach using user32.dll as my app is currently live and customers Explorer is dying lol |
Sorry but I have no ETA at this time. You may want to roll back if the issue is pressing. |
Got it, nothing to roll back to, the app was built around this API. |
@BenShapira what old approach would you have used? PrintWindow or BitBlt?
|
Repeated PrintWindow with the framerate you want, works just fine for me. This repo API would have been a better implementation for what I was trying to achieve. That being said, as mentioned above, using it causes explorer.exe to basically die after a short while, so it's just not usable. |
Sorry for the delay on updating this issue, after fixing this I was heads down on other tasks. This was fixed as part of 24H2, and should be patched sometime early next year for 23H2. Once I get more clarity on the 23H2 timeline I can share that here. |
@robmikh thanks for being a beast! I appreciate it. It will take time for enterprise customers to upgrade, but happy to hear this is coming. |
@robmikh when you get a chance, can you note down Windows 10 and Windows 11 build numbers that should have this fixed in production? |
All Windows 11 24H2 builds should have the fix (26100). Unfortunately for Windows 11 23H2, the build numbers won't tell you if the fix is deployed or enabled. Because of the way we patch these things these days, there isn't a great way to determine if you have the fix. This fix wasn't sent down to Windows 10. The team responsible for Windows 10 fixes will have to make that call. |
@robmikh I've been trying to use PrintWindow to get screenshots of applications on Windows 11, but I notice flickering with some modern apps like new Outlook and new Notepad. Has this been reported anywhere? I don't notice flickering of the app screen on Windows 10, and also PrintWindow seems faster on Windows 10. |
This is known, it's fallout from another change that was made. I can't get into specifics, but it comes down to the way PrintWindow is implemented and intersects with a few other things in GDI. We're trying to find a way to untangle it. |
Thank you very much @robmikh. Validating this is good enough! As you may have guessed from our other interactions, I am taking a shotgun approach and using all your APIs to get pixels :-) |
Hey Rob!
My app takes a screenshot of multiple selected windows every 30 seconds in a loop.
The way the screenshots are taken is by using this service -
The service is initialized once, and the
Screenshot(item)
method is the one that's being called in a loop.I and a few others using my app (on Windows 10 and 11) reported odd OS lags after letting the app run for a while.
Such as -
Everything else works just fine, it's only the OS-related apps that seem to go nuts.
Looking at the app CPU/RAM consumption after a few days of running seems to be reasonable and steady -
1% CPU
80-100MB RAM
By the way, the issues above persist even after closing the app... only fixed after a restart.
Thanks, Ben
The text was updated successfully, but these errors were encountered: