.Netmemoryleakswhencreatinglargenumberofthreads我有一个应用程序,随着时间的推移会创建很多多线程。我注意到内存使用量会随着我的运行而增加,并最终耗尽内存。但是相同的代码在我同事的环境中不会泄漏内存。我们都有相同的.net版本。我能够使用以下示例代码重现该问题,它不会泄漏到我同事的笔记本电脑上,但会泄漏到我的笔记本电脑上。publicstaticvoidMain(string[]args){Console.WriteLine("Version"+Environment.Version.ToString());如果(Environment.Is64BitProcess)Console.WriteLine("64");否则Console.WriteLine("32");while(true){Threadt=newThread(()=>{Thread.Sleep(1);});t.IsBackground=true;t.开始();线程.睡眠(1);当我运行上面的代码时,它会打印以下内容Version4.0.30319.1806332在VisualStudio2012中,项目的目标框架是.netframework4.5。该项目使用以下配置泄漏内存ProjectProperties->BuildPlatformtarget:AnyCPUPrefer32-bit:checked如果我取消选中Prefer32-bit它不会泄漏。另一个泄漏内存的配置是ProjectProperties->BuildPlatformtarget:x86Prefer32-bit:disabled由此产生的可执行文件泄漏在我的笔记本电脑上,而不是在我同事的笔记本电脑上。我使用CLRProfiler查找内存泄漏,但它没有显示任何泄漏。但我确实看到Windows资源监视器中的工作集增加了大约1MB/秒。是什么导致我的环境(而不是我的同事)在32位模式下内存使用量增加?我已经阅读了所有评论并且担心我的评论会丢失所以尝试回答。使用专为.NET应用程序、JetBrainsdotMemory或ANTS或WinDBG或任务管理器或其他本机内存工具设计的内存分析器。您可以使用所选分析器的实时图表来比较应用程序在您和您同事的笔记本电脑上的表现。我想你会发现你的笔记本电脑上的内存使用量不断增加-只需拍摄内存快照并查看内存中有多少Thread对象,哪些对象占用了大部分内存,并调查为什么以及由谁保存它们在记忆中。您还应该限制同时运行的线程数,也许使用线程池,这样您就可以在添加线程时排队线程并超过您定义的池大小。https://msdn.microsoft.com/en-us/library/h4732ks0.aspx以上是C#学习教程:.Netmemoryleaksallthecontentsharedwhencreatinglargenumbersthreads。如果对大家有用,需要了解更多关于C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
