c# - 由于虚拟内存不足,线程无法启动 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() 还是有其他选择..?
请指教!我在这里先向您的帮助表示感谢。:)
解决方案
请按照以下说明减少内存消耗:
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
推荐阅读
- javascript - 异步/等待 -> 可能没有返回值?
- erlang - ETS 似乎没有存储我的插入
- bigdata - 在 vespa 中实现自定义搜索器
- javascript - 在 React JS 中处理 Post 请求的响应
- android - Gradle 找不到方法 compile() - v28?
- asp.net - 错误 CS1513 } 预期。编译器过于挑剔?
- c - 在 2 个变量之间生成随机数
- mysql - java脚本反应本机地图使用本地数据库查找靠近位置的标记
- javascript - 当向用户显示警报框时,离子 3 中是否有任何事件
- python - 如何在 Django 过滤器“安全”上设置样式