我有一个需要并行处理文件的进程,因此我尝试使用.net的任务库来完成此任务。我有一个类,它在静态方法中执行任务,如下所示:
Task.Factory.StartNew(
() => FileProcessor.ProcessAFile(new FileInfo(e.FullPath)));
问题在于,一旦静态方法完成,似乎永远不会释放线程或永远不会回收内存。该方法正在进行一些图像处理,因此保留了大量内存,我观察该进程在其消失之前消耗大约1 GB的内存。这是ThreadPool在幕后工作并确定1 GB是要保留的适当内存量,还是我有更深的内存泄漏问题?
答案 0 :(得分:0)
我认为生成1GB的内存需要相当长的时间,因此GC
可能会将此数据移动到第二代/第三代,这些数据的检查频率低于第一代内存,因此数据需要一些时间才能回收。它可能不是内存泄漏问题,因为正如你所提到的那样,它最终会消失。
您可以通过调用GC.Collect来加快此过程,这将迫使GC
立即收集所有代的数据。在调用Collect
方法之前,您需要确保已对所有对此数据块的引用进行了清空。