C#におけるスレッド占有メモリ過大解決方法

1485 ワード

プロジェクトではマルチスレッドが使用され、1000スレッドが同時に実行されているため、メモリの消費量が高すぎることがわかりました.そこで、プロジェクトで使用されているオブジェクトを1つずつテストし、スレッドオブジェクトがメモリを消費していることがわかりました.
            Thread[] threads = new Thread[1000];
            for(int i = 0; i)
            {
                (threads[i] = new Thread(new ThreadStart(delegate()
                { 
                    Thread.Sleep(100000);
                })) { IsBackground = true }).Start();
            };

以上のテストコードを実行すると、メモリの使用量が瞬時に1 G増加し、2000+まで書くとSystemが投げ出す.OutOfMemoryExceptionの異常
---------------------
threadコンストラクション関数にint maxStackSizeがあり、//スレッド最大スタックスペースの設定
再テストはコンストラクション関数でmaxStackSizeを1024に設定し,5000スレッドを割り当てて同時実行したが,今回は1.3 G程度のメモリしか消費しなかった
(事実上、1024の実際のスタック空間は1024ではなく、スレッドが自動的に最小スタック空間(200 Kから400 Kの間でテストされる)に設定され、この最小スタック空間がどれだけ大きいかは明らかにされていない)
一般の文章ではこのパラメータが提起されることは珍しい.
転載先:https://www.cnblogs.com/hanf/archive/2012/04/10/2440017.html