现象:
内存是绝对没有问题的,3g内存,发生异常时,任务管理器里显示,可用内存还有1G多!不知道什么原因!
int i=0;
while ((i++) < 2000)
{
try
{
Thread t = new Thread(Test);
t.IsBackground = true;
t.Start();
}
catch (Exception ex)
{
MessageBox.Show("current loop: " + i.ToString() + "\r\n" + ex.ToString());
break;
}
}
void Test()
{
Thread.Sleep(120 * 1000);
}
当线程加到1305时就会报OutOfMemoryException异常。
解决:
.net默认为每个线程分配的椎大小是1m,当启动1305个线程时,光是启动线程就占用1305*1m的内存
//把椎大小由1m改为512K
Thread t = new Thread(Test, 1024 * 512);
t.IsBackground = true;
t.Start();
经过上面改动后,可以启动2602个线程.
多线程引发OutOfMemoryException,布布扣,bubuko.com
原文:http://www.cnblogs.com/kissfu/p/3890303.html