Lil*_*ver 11 .net c# system.drawing gdi+ memory-leaks
因此,在发现Bitmap类期望原始流在图像或位图的生命周期内保持打开之后,我决定找出Bitmap类在处理时是否实际关闭了流.
查看源代码,Bitmap和Image类创建一个GPStream实例来包装流,但不存储对GPStream或Stream实例的引用.
num = SafeNativeMethods.Gdip.GdipLoadImageFromStreamICM(new GPStream(stream), out zero);
Run Code Online (Sandbox Code Playgroud)
现在,GPStream类(内部)没有实现Release或Dispose方法 - 什么都不允许GDI关闭或处理流.由于Image/Bitmap类没有保留对GPStream实例的引用,因此GDI,Drawing.Bitmap或Drawing.Stream似乎无法正确关闭流.
我可以继承Bitmap来解决这个问题,但是,等等,它是密封的.
请告诉我,我错了,并且MS不仅无法编写不会泄漏API资源的代码.
由于您在此示例中提供了流,因此我认为您有责任处理它.