【发布时间】:2014-11-12 18:11:27
【问题描述】:
我正在遍历实体框架中的许多不同对象,获取一些相关数据并保存这些数据。我正在为每个项目打开一个新线程,因为在方法中完成工作需要一段时间。但是,我在循环中出现了几千个项目的内存异常。我试图弄清楚这个问题发生在哪里以及如何保持多线程功能,但修复错误。任何帮助是极大的赞赏。谢谢你。
foreach (var prod in products)
{
try
{
new Thread(() =>
{
ParsePage(prod);
}).Start();
counter++;
Console.WriteLine(counter);
}
catch (Exception ex)
{
string message = ex.Message;
}
}
public void ParsePage(Product p)
{
//New Repository
IDataRepository repo = new DataRepository();
//Grab related page report
PageReport pr = repo.PageReports.Where(c => c.ThePageType == "Product").FirstOrDefault(c => c.ThePageTypeID == p.ProductID);
//Do some stuff
//Save
repo.SavePageReport(pr);
}
【问题讨论】:
-
那是
DataRepositoryIDisposable吗?如果是这样,请尝试将其包装在using语句中。 -
它是否包含像
DbContext这样的一次性成员?如果是这样,也许它应该是一次性的。 -
在你的抓取查询中尝试
AsNoTracking().. -
作为旁注,您应该考虑使用任务而不是线程
-
感谢您的建议。有什么特别的原因吗?
标签: c# .net entity-framework memory-management out-of-memory