【发布时间】:2018-09-08 14:19:42
【问题描述】:
今天我的客户在运行我的应用程序时收到错误(如下)
ERR::-2146233051:线程无法启动。在 System.Threading.Thread.StartInternal(IPrincipal 主体, StackCrawlMark& stackMark) 在 System.Threading.Thread.Start()
=========
如您所见,它表明创建线程失败。用于创建线程的代码
//-state -> stateobject for receving socketdata
objState.m_strReceivedData = state.m_strReceivedData;
objState.m_strComputerName = state.m_strComputerName;
objThread = new Thread(new ParameterizedThreadStart(MethodName));
objThread.Start(objState);
根据错误,上面的代码似乎发生了错误。此外,在事件查看器中,内存不足的警告表明我的 exe 正在使用最多的虚拟内存。以下是我在事件查看器中收到的消息。
Windows 成功诊断出虚拟内存不足的情况。以下程序消耗最多的虚拟内存:application.exe (4272) 消耗 32793702400
我认为有内存泄漏,所以我应该强行调用 GC.Collect() 或者还有其他选择吗..?
请指教!我在这里先向您的帮助表示感谢。 :)
【问题讨论】:
-
调用 GC 不是好的和标准的选择。使用诸如“MemProfiler”之类的内存分析器来检测内存泄漏。
-
添加@MojtabaTajik 评论,GC 足够智能,可以在系统内存不足时自动触发。所以在这种情况下强行打电话不会改变任何事情
标签: c# multithreading memory-leaks threadpool