【发布时间】:2014-03-30 18:26:43
【问题描述】:
我有一个需要并行处理文件的进程,所以我正在尝试使用 .net 的任务库来完成此任务。我有一个类以静态方法执行任务,如下所示:
Task.Factory.StartNew(
() => FileProcessor.ProcessAFile(new FileInfo(e.FullPath)));
问题在于,一旦静态方法完成,似乎永远不会释放线程或永远不会回收内存。该方法正在执行一些图像处理,因此会占用大量内存,并且我观察到该进程在趋于平稳之前消耗了大约 1 GB 的内存。这是 ThreadPool 在幕后工作并确定 1 GB 是适当的内存量,还是我有更深层次的内存泄漏问题?
【问题讨论】:
-
“在它趋于平稳之前。”是你的答案。 ThreadPool 和任务都与内存管理无关——由 GC 决定何时收集内存以及使用多少内存。
-
如果在
Task完成后你一直持有对它的引用,GC 可能永远没有机会按照你期望的方式完成它的工作。
标签: c# .net multithreading memory task-parallel-library