由于虚拟内存不足,线程无法启动C#

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于虚拟内存不足,线程无法启动C#相关的知识,希望对你有一定的参考价值。

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

错误:: - 2146233051:线程无法启动。 System.Threading.Thread.Start()上的System.Threading.Thread.StartInternal(IPrincipal principal,StackCrawlMark和stackMark)

=========

正如您所看到的,它表明无法创建线程。用于创建Thread的代码

//-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()或者还有其他任何选项吗?

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

答案

按照以下方式减少内存消耗:

1.当对象被创建和使用而你不需要它时,进一步使其为空。

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

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

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

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

  public class Student
    {
       string Name;
       string ID;
    }

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

学生1 {姓名:ramu,身份证号码:40}

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

Stuent2 {姓名:ramu,身份证号码:40}

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

其中当然占据了记忆

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

以上是关于由于虚拟内存不足,线程无法启动C#的主要内容,如果未能解决你的问题,请参考以下文章

启动虚拟机显示物理内存不够无法启动

由于内存不足,无法在vagrant ubuntu框中启动zookeeper服务器

电脑打不开,出现“系统资源不够,无法完成APT”怎么办?

VMware虚拟机里提示虚拟内存过小,如何处理?

服务器存储空间不足无法处理此命令

我由于收集太多图片导致虚拟内存不足