我创建了一个应用程序,用于读取CSV
个文件,创建DataServiceContext
并将数据大量插入我的远程OData
API服务器。
然而,在导入30,000
条记录后5分钟,我发现该应用程序仍在使用750MB的内存!
我有什么办法可以减少内存使用量吗?或者至少让它早点收集垃圾?它似乎没有实现IDisposable
,而我的google-fu也让我失望了。感谢。
答案 0 :(得分:3)
我一直在处理后使用它来清除上下文,如果它对任何人都有帮助。
public static void ClearChanges(this DataServiceContext context)
{
foreach (var entity in context.Entities.ToList())
{
context.Detach(entity.Entity);
}
foreach (var link in context.Links.ToList())
{
context.DetachLink(link.Source, link.SourceProperty, link.Target);
}
}
答案 1 :(得分:2)
我在Microsoft.OData.Client.DataServiceContext类中遇到了类似于System.Data.Services.Client.DataServiceContext的类似问题。
发生的事情是DataServiceContext有一个EntityTracker,用于跟踪对正在迭代的实体所做的任何更改。看了一下后,我看到DataServiceContext有一个MergeOption 属性。要解决您的问题,请将其设置为NoTracking,如下所示:
dsc.MergeOption = MergeOption.NoTracking;
这应该在开始枚举之前完成一次,无论是在构造函数中还是在循环之前的任何地方。