線程、資料庫連線等資源創建/銷毀代價高。池化技術:預先備妥資源,用時取用、閒時歸還、不足時擴充,避免頻繁分配回收。
高併發場景:每秒 100 請求,每請求需 10 線程 → 每秒 1000 線程開關,每線程 1 MB 堆疊,記憶體分配/回收壓力極大。
ThreadPool.SetMinThreads(2, 2); // 最小工作/IO 線程
ThreadPool.SetMaxThreads(4, 4); // 最大工作/IO 線程
最小線程數確保池中始終保留線程,避免頻繁創建銷毀;最大線程數限制併發上限,超出則排隊。
static readonly int totalThreads = 10;
for (int i = 0; i < totalThreads; i++)
{
ThreadPool.QueueUserWorkItem(o =>
{
Thread.Sleep(1000);
int a, b;
ThreadPool.GetAvailableThreads(out a, out b);
Console.WriteLine(string.Format("({0}/{1}) #{2} : {3}", a, b, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("mm:ss"));
});
}
Console.WriteLine("Main thread finished");
Console.ReadLine();

結果驗證:最大 4 線程並行,其餘排隊;任務完成釋放線程後,等待任務接續執行。