我试图更好地掌握 .NET 线程模型。我多次听到并阅读(最近一次是在观看此视频时:AppFabric.tv - 与 Jeff Richter进行线程处理),.NET 线程占用至少 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();
}
}
任何见解将不胜感激。