任务并行性、内存管理和任务结束

本文关键字:任务 结束 管理 内存 并行性 | 更新日期: 2023-09-27 17:54:59

我有一个需要并行处理文件的过程,所以我试图使用。net的任务库来完成这一点。我有一个在静态方法中执行任务的类,如下所示:

Task.Factory.StartNew(
() => FileProcessor.ProcessAFile(new FileInfo(e.FullPath)));

问题是,一旦静态方法完成,线程似乎永远不会被释放或内存永远不会被回收。该方法正在进行一些图像处理,因此占用了大量内存,我观察到该进程在耗尽之前消耗了大约1 GB的内存。这是ThreadPool在幕后工作并确定1 GB是适当的内存量,还是我有更深的内存泄漏问题?

任务并行性、内存管理和任务结束

我认为生成1GB的内存需要相当长的时间,所以GC可能将这些数据移动到第二/第三代,这些数据比第一代检查的次数少,因此数据需要一些时间来回收。这可能不是内存泄漏问题,因为正如您提到的,它最终会恢复正常。

你可以通过调用GC来加速这个过程。Collect,这将强制GC立即从所有代收集数据。在调用Collect方法之前,您需要确保所有对该数据块的引用都已被空。