我有一個應用程序處理來自文本文件的數據 - 它從文件讀取一行然後處理它,然後將結果放入另一個文件。處理完一行後,它會處理下一行,直到完成整個文件。處理文件中的某些行非常耗時。所以我決定把處理邏輯放在單獨的線程中,如果處理需要更長的時間10秒。我殺了線程。所以我的代碼是這樣的:c#任務類和內存泄漏
public class Handler
{
public void Handle(string row)
{
// Perform handling
}
}
public class Program
{
private static bool HandleRow(string row)
{
Task task = new Task(() => new Handler().Handle(row));
task.Start(); // updated
var waitResult = task.Wait(timeout); // timeout is 10 sec.
if(waitResult == false || task.IsFaulted)
return false;
return true;
}
public static void Main()
{
foreach(var row in GetRowsToHandle())
HandleRow(row);
}
}
但不知何故運行程序時,我得到了內存異常。看來內存沒有正確釋放。
有誰知道爲什麼會發生內存泄漏?我的代碼嗅探器忘了包含task.Start()
。現在我把它放在那裏
你在哪裏想你「殺死線程」?我沒有看到這方面的證據... –
什麼行引發內存異常? – Polyfun