已解决:事实证明受影响的计算机已安装.NET 4.5测试版。
我有一个使用.NET4的C#应用程序,在对
的调用中无限期地死锁/挂起GC.AddMemoryPressure(12000000)
由于它是一个生产中的应用程序,我无法真正共享任何代码 - 但是我想得到一些关于可能使GC.AddMemoryPressure挂起的提示。
答案 0 :(得分:2)
文档提示:
您必须确保准确删除您的压力 加。如果不这样做会对性能产生不利影响 系统在长时间运行的应用程序中。
这意味着你必须非常非常小心平衡这两个电话:
AddMemoryPresure
和RemoveMemoryPreasure
顺便说一下,建议在你分配大量非托管资源的情况下使用它,以这种方式发信号通知GC
它必须接受的事实还算一下记忆的失落。
在极大的案例中,简单的Dispose()
,Finalize()
正确的管理就足够了。
答案 1 :(得分:2)
感谢您的意见。
事实证明,受影响的计算机安装了.NET 4.5 beta。
由于一个核心完全饱和,似乎没有陷入僵局。对AddMemoryPressure的调用似乎最终出现在从未返回的函数clr!CNameSpace :: GcScanRoots中。
卸载4.5 beta并安装.NET 4似乎解决了这个问题。
如果这确实是问题,那么我肯定希望MS在发布之前修复它。
答案 2 :(得分:1)
我不会弄乱手动GC。确保您的资源在使用后处理完毕并完成。 GC手动可以搞砸系统。只要在程序中删除了对象,.NET就可以很好地管理GC。