2014-03-30 69 views
1

我有一個需要並行處理文件的進程,所以我試圖使用.net的任務庫來完成此任務。我有一類瓶坯任務在一個靜態方法,像這樣:任務並行性,內存管理和任務結束

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

的問題是,它似乎是線程永遠不會釋放或一次靜態方法完成的內存空間還沒有回收。該方法正在執行一些圖像操作,因此可以保留大量的內存,並且我注意到該進程在平鋪之前消耗大約1 GB的內存。這是ThreadPool在後臺工作,並確定1 GB是適當的內存量,還是我有更深的內存泄漏問題?

+1

」之前它「水平」。是你的答案。 ThreadPool和任務都與內存管理無關 - 由GC決定何時收集內存和使用多少內存。 –

+0

如果您在完成後持續提及「任務」,則GC可能永遠沒有機會以您期望的方式工作。 – Noseratio

回答

0

我認爲生成1GB的內存需要相當長的時間,因此GC可能將這些數據移動到第二代/第三代,而第二代/第三代比第一代更少檢查,因此數據需要一些時間被回收。這可能不是一個內存泄漏問題,因爲正如你所提到的,它最終會消失。

您可以通過調用GC.Collect來加速此過程,這將迫使GC立即收集所有代的數據。您需要確保在調用Collect方法之前,對這部分數據的所有引用都已被清零。 「

」 「