由于虚拟内存不足,线程无法启动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#的主要内容,如果未能解决你的问题,请参考以下文章