C#中线程占用内存过大解决方法
2014-09-25 11:22
441 查看
C#中线程占用内存过大解决方法
项目中用到了多线程,而且是1000线程并发运行,发现内存占用过高,于是对项目里用到的对象逐个测试,发现是线程对象占用内存
运行以上测试代码,内存使用量瞬间增加1G, 如果数量写到2000+, 直接抛出System.OutOfMemoryException的异常.
---------------------
经查出thread构造函数里有一个 int maxStackSize, //设置线程最大栈空间
再次测试在构造函数中把 maxStackSize设置为1024, 分配5000线程并发运行, 这次只占用了1.3G左右内存
Thread thread1 = new Thread(new ThreadStart(test),1024);
(事实设置1024实际栈空间并非1024,而是线程自动设置为最小栈空间(测试在200K至400K之间),具体没查这个最小栈空间是多大)
在一般文章中很少见有这个参数被提起.
项目中用到了多线程,而且是1000线程并发运行,发现内存占用过高,于是对项目里用到的对象逐个测试,发现是线程对象占用内存
Thread[] threads = new Thread[1000]; for(int i = 0; i<threads.Length; i++) { (threads[i] = new Thread(new ThreadStart(delegate() { Thread.Sleep(100000); })) { IsBackground = true }).Start(); };
运行以上测试代码,内存使用量瞬间增加1G, 如果数量写到2000+, 直接抛出System.OutOfMemoryException的异常.
---------------------
经查出thread构造函数里有一个 int maxStackSize, //设置线程最大栈空间
再次测试在构造函数中把 maxStackSize设置为1024, 分配5000线程并发运行, 这次只占用了1.3G左右内存
Thread thread1 = new Thread(new ThreadStart(test),1024);
(事实设置1024实际栈空间并非1024,而是线程自动设置为最小栈空间(测试在200K至400K之间),具体没查这个最小栈空间是多大)
在一般文章中很少见有这个参数被提起.
相关文章推荐
- C#中线程占用内存过大解决方法
- C#中线程占用内存过大解决方法
- C#中线程占用内存过大解决方法
- (转)C# Winform应用程序占用内存较大解决方法整理
- C# Winform应用程序占用内存较大解决方法整理(转)
- C# Winform应用程序占用内存较大解决方法整理(转)-- SetProcessWorkingSetSize
- wamp中mysqld占用内存过大的解决方法
- MSSQL占用内存过大的解决方法
- MSSQL数据库占用内存过大造成服务器死机问题的解决方法
- C# Winform应用程序占用内存较大解决方法整理(转)
- C# Winform应用程序占用内存较大解决方法整理
- C# Winform应用程序占用内存较大解决方法整理
- paip.提升性能---C#.NET程序内存占用过多以及OutOfMemory解决方法
- MSSQL占用内存过大的解决方法
- 关于fielddata数据占用内存过大的解决方法
- C# Winform应用程序占用内存较大解决方法整理
- C# Winform应用程序占用内存较大解决方法整理
- CI框架在CLI下执行占用内存过大问题的解决方法
- C# Winform应用程序占用内存较大解决方法整理(转)
- CI框架在CLI下执行占用内存过大问题的解决方法