C# 是否应该执行此任务。在循环中运行,泄漏内存?
给出这个简单的C代码:- 这会泄漏内存吗 我的理解是,这些任务将在线程池中排队并并发执行,这意味着(除了处理中的延迟等)最多将使用两个线程 即:-C# 是否应该执行此任务。在循环中运行,泄漏内存?,c#,multithreading,task,threadpool,C#,Multithreading,Task,Threadpool,给出这个简单的C代码:- 这会泄漏内存吗 我的理解是,这些任务将在线程池中排队并并发执行,这意味着(除了处理中的延迟等)最多将使用两个线程 即:- 第一次迭代创建一个需要50毫秒的任务 在“线程1”上运行 40毫秒后的第二次迭代创建另一个任务。“线程1”正忙,因此此任务在“线程2”上运行 第三次迭代,再过40毫秒(现在距离第一次迭代80毫秒)创建另一个任务。在此阶段,“线程1”上的第一个任务已完成,因此可以使用“线程1” 等等 编辑 图解 编辑2 虽然问题的焦点是如何工作,而不是如何工作,
- 第一次迭代创建一个需要50毫秒的任务 在“线程1”上运行
- 40毫秒后的第二次迭代创建另一个任务。“线程1”正忙,因此此任务在“线程2”上运行
- 第三次迭代,再过40毫秒(现在距离第一次迭代80毫秒)创建另一个任务。在此阶段,“线程1”上的第一个任务已完成,因此可以使用“线程1”
- 等等
观察线程池计数也支持使用多个线程同时完成任务的观点。这是内存使用效率低下,但不是泄漏。尝试时发生了什么?@DourHighArch在Windows/.net CLR上,内存使用是静态的。在Linux/Mono上,内存使用会随着时间的推移而增加。@Aleks如果分配的任务比运行的任务多,内存怎么可能保持不变?@MickyD我添加了一个图表,试图说明为什么我认为它们不应该堆积起来
static void Main(string[] args)
{
while (true)
{
Task.Run(() =>
{
Thread.Sleep(50);
});
Thread.Sleep(40);
}
}