system.threading.task,线程池和奇怪的内存使用情况

时间:2014-06-24 06:55:27

标签: c# out-of-memory task threadpool

最近我对任务和线程池感到困惑,给出了以下代码:

    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。

那是什么让这件事发生的?

0 个答案:

没有答案