我有一個以預定方式運行作業的控制檯應用程序。 作業做兩件事情:多線程應用程序和潛在內存泄漏(C#)
1)運行SQL語句 2-)的E-mail聲明
如果我運行順序形式的工作,一切按預期工作,工作的結果運行時,內存消耗會在操作期間增加,然後釋放內存,但是如果我並行運行作業,使用任務並行庫,在所有作業完成後,與順序選項相比,內存消耗會保持高得多,並且還會繼續執行其他作業增加內存消耗。
要我用下面的試驗例更具體的:
依序:(後循環完成,GC被明確地收集用於測試目的的內存消耗是大約55兆字節)
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 15; i++)
{
var job = new BIJob(reportData);
job.Execute();
}
Thread.Sleep(10000);
}
並行: (循環完成後,顯式收集GC以用於測試目的內存消耗約爲85兆字節)
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 15; i++)
{
Task jobRunTask = Task.Factory.StartNew(() =>
{
var job = new BIJob(reportData);
job.Execute();
});
}
Thread.Sleep(10000);
}
有近似值經過45次迭代後內存消耗差異達到30兆字節,並且並行版本中沒有收集額外的內存。
什麼可能導致這種行爲?任何想法/意見表示讚賞。
您確定您的'job.Execute()'可以處理多線程場景嗎? – Natxo 2014-10-07 16:45:23