我的应用程序(用C#编写)在过去的几个月里没问题,但上周突然开始导致内存泄漏。我没有重建它,二进制文件是一样的!
虽然试图找出根本原因是什么,但我最终得到了后来在Thread memory leak中找到的相同的测试应用程序。所以我简单地复制了Hans提出的解决方案并启动了它。内存泄漏持续存在。添加GC.Collect()只会导致内存增长变得锯齿状,因为GC在每次调用中都恢复了分配内存的一小部分。
使用分析器检查,除了与线程相关的内容之外,所有其他托管或非托管对象都已正确完成。
class Program
{
static void test()
{
}
static void Main(string[] args)
{
int cnt = 0;
while (true)
{
Thread test_thread = new Thread(() => test());
test_thread.Start();
if (++cnt % 256 == 0) GC.Collect();
Thread.Sleep(20);
}
}
}
然后我在另一台PC上尝试了相同的测试代码,并且(出乎意料!)它工作正常,并且根本没有内存泄漏。
更新:受此主题的启发 .Net Memory Leak when creating lots of threads 我试图为不同的目标建立。使用x64 target似乎解决了测试应用程序中的问题。不幸的是,我的真实项目包含一个无法重建的第三方子项目。
看来,我的电脑出了问题,导致GC无法正常工作。你能建议,检查什么,在哪里看?提前谢谢。
答案 0 :(得分:1)
.Net Memory Leak when creating lots of threads的评论中有解决方案。我检查了Windows安全模式下没有泄漏。然后在正常模式下,我开始杀死非重要的进程。正如Hans Passant所建议的那样,防病毒过程就可以解决问题。谢谢!
我的应用程序再次运行,但PC没有保护。 此外,没有任何解释,也没有需要学习的经验教训。