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之間),具體沒查這個最小棧空間是多大)

在一般文章中很少見有這個參數被提起.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM