zoukankan      html  css  js  c++  java
  • C#中线程占用内存过大解决方法

    项目中用到了多线程,而且是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左右内存

    (事实设置1024实际栈空间并非1024,而是线程自动设置为最小栈空间(测试在200K至400K之间),具体没查这个最小栈空间是多大)

    在一般文章中很少见有这个参数被提起.

  • 相关阅读:
    PHP入门
    requests中text,content,json之间的区别
    有关pip报错的问题

    pycharm操作
    python selenium 相关操作
    python tkinter菜单
    初识Go
    Python _easygui详细版
    easygui _1
  • 原文地址:https://www.cnblogs.com/hanf/p/2440017.html
Copyright © 2011-2022 走看看