我想要更好地理解.NET線程模型。我聽過多次(最近在觀看這個視頻時看到這個視頻:AppFabric.tv - Threading with Jeff Richter),因爲.NET線程佔用了至少1MB的內存(因爲它們爲它們的堆棧預留了1MB)。 現在,我試着寫一些代碼來證明這一點,但我最終的結果就像爲什麼我的線程看起來佔用的內存少於1MB?
297 threads are using 42MB of memory
298 threads are using 43MB of memory
299 threads are using 40MB of memory
300 threads are using 40MB of memory
因此,線程似乎沒有使用的每個內存1MB。 我已盡最大努力重現上述視頻展示5分鐘的節目,但我似乎沒有得到相同的結果,我不明白爲什麼。由於內存消耗似乎有時在下降,我認爲線程必須退出或放在一個揹負的地方?或者,也許我沒有正確測量內存?
用於獲得上述結果的程序是這樣的:
class Program
{
static void Main(string[] args)
{
ManualResetEvent manualReset = new ManualResetEvent(false);
int createdThreads = 0;
try
{
while (true)
{
Thread t = new Thread(WaitOneEvent);
t.Start(manualReset);
createdThreads++;
Console.WriteLine("{0} threads are using {1}MB of memory", createdThreads, System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64/(1024 * 1024));
}
}
catch (OutOfMemoryException)
{
Console.WriteLine("Out of memory at {0} threads", createdThreads);
System.Diagnostics.Debugger.Break();
manualReset.Set();
}
}
private static void WaitOneEvent(object eventObject) {
((ManualResetEvent)eventObject).WaitOne();
}
}
任何有識之士將不勝感激。