C# 是否应该执行此任务。在循环中运行,泄漏内存?

C# 是否应该执行此任务。在循环中运行,泄漏内存?,c#,multithreading,task,threadpool,C#,Multithreading,Task,Threadpool,给出这个简单的C代码:- 这会泄漏内存吗 我的理解是,这些任务将在线程池中排队并并发执行,这意味着(除了处理中的延迟等)最多将使用两个线程 即:- 第一次迭代创建一个需要50毫秒的任务 在“线程1”上运行 40毫秒后的第二次迭代创建另一个任务。“线程1”正忙,因此此任务在“线程2”上运行 第三次迭代,再过40毫秒(现在距离第一次迭代80毫秒)创建另一个任务。在此阶段,“线程1”上的第一个任务已完成,因此可以使用“线程1” 等等 编辑 图解 编辑2 虽然问题的焦点是如何工作,而不是如何工作,

给出这个简单的C代码:-

这会泄漏内存吗

我的理解是,这些任务将在线程池中排队并并发执行,这意味着(除了处理中的延迟等)最多将使用两个线程

即:-

  • 第一次迭代创建一个需要50毫秒的任务 在“线程1”上运行
  • 40毫秒后的第二次迭代创建另一个任务。“线程1”正忙,因此此任务在“线程2”上运行
  • 第三次迭代,再过40毫秒(现在距离第一次迭代80毫秒)创建另一个任务。在此阶段,“线程1”上的第一个任务已完成,因此可以使用“线程1”
  • 等等
编辑 图解

编辑2 虽然问题的焦点是如何工作,而不是如何工作,但结果是在Windows/.NET上,随着时间的推移,内存使用保持不变,而在Linux/Mono上,内存使用增加


观察线程池计数也支持使用多个线程同时完成任务的观点。

这是内存使用效率低下,但不是泄漏。尝试时发生了什么?@DourHighArch在Windows/.net CLR上,内存使用是静态的。在Linux/Mono上,内存使用会随着时间的推移而增加。@Aleks如果分配的任务比运行的任务多,内存怎么可能保持不变?@MickyD我添加了一个图表,试图说明为什么我认为它们不应该堆积起来
static void Main(string[] args)
{
    while (true)
    {
        Task.Run(() =>
        {
            Thread.Sleep(50);
        });

        Thread.Sleep(40);
    }
}