最近我对任务和线程池感到困惑,给出了以下代码:
static void Main(string[] args)
{
while (true)
{
Thread.Sleep(1);
Task t = new Task(run);
t.Start();
}
}
static void run()
{
Console.WriteLine(DateTime.Now);
Thread.Sleep(1000 * 3600);
Console.WriteLine("end");
}
根据代码,它将每秒创建1000个任务。 我在性能计数器中观察线程数,线程数缓慢而平稳地增加,每秒约1个线程。而且记忆也会缓慢而平稳地增加。 当线程数为1028时,它停止增加(我认为计数达到线程池线程的最大计数,并且新任务必须排队。)顺便说一句,没有OutOfMemoryException。
但当我评论出'Thread.Sleep(1);'时发生了一件奇怪的事。
在性能计数器中,线程计数非常快速地增长,总内存使用量大约为1445Mb。一切都发生得如此之快最后有一个OutOfMemoryException。
那是什么让这件事发生的?