1. 程式人生 > >C#中執行緒佔用記憶體過大解決方法

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

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