我有一个以预定方式运行作业的控制台应用程序。 作业做两件事情:多线程应用程序和潜在内存泄漏(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