XPS documents memory leak (System.Windows.ContextLayoutManager+LayoutQueue+Request and XpsDocument.GetFixedDocumentSequence())
See original GitHub issueoriginally posted at runtime but is for wpf: https://github.com/dotnet/runtime/issues/66756
Description
Situation: we have a windows service running in .net 6 with an admin panel in asp.net core 6 (+ blazor + pri nt drivers etc…)
(complex solution, but for the memory leak mainly does this:)
PDF files dumped in hotfolder
--> opened by our code and converted to XPS
--> modifications to XPS file (e.g. adding barcode)
--> converting back to PDF the single (or merged) modified XPS documents.
--> dumping the resulting PDF files to a folder
When processing 5 documents, we see an increase of memory with ±1.5MB memory because System.Windows.ContextLayoutManager+LayoutQueue+Request
and this is because of being called by XpsDocument.GetFixedDocumentSequence()
are never released or GC’d.
Eventually when our service runs for a time, it just runs out of memory.
Reproduction Steps
unable to create a minimal repro-solution, our software should be run and configured to reproduce (if needed somebody can get in contact with me in PM).
I guess these code in stackoverflow topics will demonstrate a similar issue: https://stackoverflow.com/questions/218681/opening-xps-document-in-net-causes-a-memory-leak https://stackoverflow.com/questions/51463348/c-sharp-reading-xps-causing-memory-leak https://stackoverflow.com/questions/12703796/creating-fixed-document-causes-memory-leak https://social.msdn.microsoft.com/Forums/en-US/becc0d42-908a-435c-a4ff-175843b83ad8/memory-leak-while-opening-the-xps-document-in-documentviewer https://social.msdn.microsoft.com/Forums/vstudio/en-US/b7fec24a-138b-4d3b-bdb3-cd4f0785e4ac/populating-collection-with-rendertargetbitmap-via-thread-causes-memory-leak
Expected behavior
Processing XPS documents should release memory.
Actual behavior
When processing XPS documents the memory increases, after processing 5.000 - 10.000 documents, our service crashes due to OutOfMemory. (depending on the hardware and type of documents this number can be higher/lower…)
Regression?
We’ve seen this issue in every version of .net core, seen it last in .net 5 and after upgrading to .net 6 it is still present.
This memory leak and the issues have been out there already for a while (also in .NET Framework). see:
https://stackoverflow.com/questions/218681/opening-xps-document-in-net-causes-a-memory-leak https://stackoverflow.com/questions/51463348/c-sharp-reading-xps-causing-memory-leak https://stackoverflow.com/questions/12703796/creating-fixed-document-causes-memory-leak https://social.msdn.microsoft.com/Forums/en-US/becc0d42-908a-435c-a4ff-175843b83ad8/memory-leak-while-opening-the-xps-document-in-documentviewer https://social.msdn.microsoft.com/Forums/vstudio/en-US/b7fec24a-138b-4d3b-bdb3-cd4f0785e4ac/populating-collection-with-rendertargetbitmap-via-thread-causes-memory-leak
Known Workarounds
No working workaround for us… :sad
Configuration
VS 2019 Pro 16.11.11 VS 2022 17.2.0 Preview 2.0 Issue occurred in every version we’ve been using .net 5, .net 6
Windows 10 21H1 Windows 11 21H2
Other information
suggested fixes as preloading PresentationCore and/or PresentationFramework don’t work (https://web.archive.org/web/20110404040352/http://support.microsoft.com/kb/942443)
Calling updatelayout as suggested in stackoverflow also doesn’t seem to work: https://stackoverflow.com/questions/218681/opening-xps-document-in-net-causes-a-memory-leak https://stackoverflow.com/questions/51463348/c-sharp-reading-xps-causing-memory-leak https://stackoverflow.com/questions/12703796/creating-fixed-document-causes-memory-leak https://stackoverflow.com/questions/50560580/memory-leak-at-xpsdocument-getfixeddocumentsequence https://social.msdn.microsoft.com/Forums/en-US/becc0d42-908a-435c-a4ff-175843b83ad8/memory-leak-while-opening-the-xps-document-in-documentviewer https://social.msdn.microsoft.com/Forums/vstudio/en-US/b7fec24a-138b-4d3b-bdb3-cd4f0785e4ac/populating-collection-with-rendertargetbitmap-via-thread-causes-memory-leak
We really hope the team investigates some time in XPS as it is really terrible, and it always being updated to “Future”, “Future”, “Future” 😠 . See also:
Issue Analytics
- State:
- Created a year ago
- Reactions:2
- Comments:5 (4 by maintainers)
Top GitHub Comments
Same issue with a png file exporter (oxyplot), which instantiates a LOT of :
It goes up, and up, and up – and as it takes place in a test project, the memory is never released even between different tests when the runner runs multiple test in a row … On CI we need to restart the computer regularly to make sure the memory is freed. This is absolute non sense.
The impossibility to free the memory by hand is a absolute nightmare. This problem seems to be reported to Microsoft for at least a decade as I found out on internet and as @wstaelens has here documented.
Any news from the dev team ?
I don’t know if this helps @gurpreet-wpf ?
00007ffcf5b83288 407286 16291440 System.Windows.ContextLayoutManager+LayoutQueue+Request 00007ffcf5b1b290 407286 19549728 System.Windows.LayoutEventList+ListItem
😢
(@danmoseley @SamBent @singhashish-wpf @ThomasGoulet73 )