我有一个程序在运行一段时间后出现“内存不足”异常。这是一个相当复杂的程序,涉及很多异步的东西。与其从代码开始诊断问题,我认为如果我能分辨出哪些对象在没有被垃圾收集的内存中弄乱了,这可能会给我一个先机。
有没有办法做到这一点?
我有一个程序在运行一段时间后出现“内存不足”异常。这是一个相当复杂的程序,涉及很多异步的东西。与其从代码开始诊断问题,我认为如果我能分辨出哪些对象在没有被垃圾收集的内存中弄乱了,这可能会给我一个先机。
有没有办法做到这一点?
如果您使用线程来异步您对线程的代码控制,例如同时运行特定线程,例如在完成此运行后仅同时运行 10 个线程,则运行下一个 10 个线程,并且如果您正在创建任何非托管对象,请显式处理它
即使您可以使用分析器来检查对象,但有时当您有很多异步内容时,您无法相应地更改您的逻辑。
通常,我们通过使用事件处理程序模式在不知不觉中造成内存泄漏。
我有一些关于此的帖子:http: //www.codeproject.com/Articles/123448/GC-Algorithm-and-Story-of-WeakReference
http://www.abhisheksur.com/2012/02/optimizing-inpc-objects-against-memory.html
它们不是针对您的问题的,但它可以帮助您。
我肯定会使用分析器,我用于内存分析的最好的之一是 SciTech 的内存分析器Scitech .NET Memory Profiler