我已经找到了解决办法,但这种行为非常令人担忧,我想我在这里问是否还有其他人也看到了。
基本上,除非强制使用x86 (),否则运行在x64 Windows 7中的相同二进制文件(将解释为什么在x64 Windows 7中运行)将泄漏。
解释:
应用程序将增长到超过1.5G,并最终抛出内存不足异常。(1)工作越快,异常越快。
对于那些准备射击(2)导致泄漏的人,我确实测试了删除它,泄漏仍然是+,如果我执行GC.Collect(),内存就会很好地释放,这在我的书中是一个.NET问题。
谢谢。
发布于 2011-04-07 11:37:52
好吧,值得的是,这是我的收获。
我看过和你所经历的完全一样的问题。它回到了.NET 2.0版本,但我正在处理大图像,虽然我会处理这些图像,但是内存消耗会上升--直到我手动调用GC.Collect()。
还有什么相似之处?主持!我的应用程序是一个非托管EXE,它将使用COM创建一个对象,该对象是一个向COM公开的.NET类。这将导致非托管EXE承载CLR。
在Windows X64上,X32应用程序将以WOW (windows On windows)模式加载,这是一个类似的主机,我相信可以展示类似的问题。在托管环境中,GC似乎无法完全理解内存消耗。
发布于 2011-04-07 11:19:58
您是否正确地配置了位图和包括GDI+对象在内的所有其他一次性资源?
using(Bitmap bitmap = ...)
{
... do your stuff
}您需要查看应用程序才能发现问题--对于32位应用程序来说,1.5GB显然太过了。事实上,您在不同的机器上有不同的行为,不同的操作系统并不意味着您应该归咎于操作系统。
发布于 2011-04-07 11:21:25
您可以尽量不那么依赖垃圾收集器。如果您重写绘图代码以清理未使用的资源,则可能不会遇到所描述的场景。
Image.Dispose()
注意:始终在释放上次对图像的引用之前调用Dispose。否则,在垃圾收集器调用Image对象的Finalize方法之前,它使用的资源将不会被释放。
https://stackoverflow.com/questions/5580135
复制相似问题