首页 > 代码库 > 多线程引发OutOfMemoryException

多线程引发OutOfMemoryException

现象:

内存是绝对没有问题的,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改为512KThread t = new Thread(Test, 1024 * 512);                    t.IsBackground = true;                    t.Start();

  

经过上面改动后,可以启动2602个线程.