首页 > 解决方案 > 由于虚拟内存不足,线程无法启动 C#

问题描述

今天我的一个客户在运行我的应用程序时收到了一个错误(如下)

ERR::-2146233051:线程无法启动。在 System.Threading.Thread.StartInternal(IPrincipal principal, 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() 还是有其他选择..?

请指教!我在这里先向您的帮助表示感谢。:)

标签: c#multithreadingmemory-leaksthreadpool

解决方案


请按照以下说明减少内存消耗:

1.如果创建和使用对象并且您不需要它进一步使其为空。

2.不要保持加载不必要的数据/不要尝试一次加载大量数据

比如 1.) 从文件中读取的大量数据 2.) 从数据库中读取的大量数据

3.当你不使用块中的对象时,不要在块中提及它,这样GC很容易快速收集它。

4.不包含相同数据对象的副本,例如

  public class Student
    {
       string Name;
       string ID;
    }

如果为此创建了两个具有相同数据的对象

Student1 {姓名:ramu,ID:40}

然后您创建了另一个具有相同数据的对象 student2

学生 2 { 姓名:ramu,ID:40 }

现在即使它是不同的对象,但它是数据的重复

哪个偏离路线占用内存

if student1=2mb
then student2=2mb
total 4mb for maintaining same data

推荐阅读