处理DataServiceContext?

时间:2016-02-18 15:14:55

标签: c# odata wcf-data-services

我创建了一个应用程序,用于读取CSV个文件,创建DataServiceContext并将数据大量插入我的远程OData API服务器。

然而,在导入30,000条记录后5分钟,我发现该应用程序仍在使用750MB的内存!

我有什么办法可以减少内存使用量吗?或者至少让它早点收集垃圾?它似乎没有实现IDisposable,而我的google-fu也让我失望了。感谢。

2 个答案:

答案 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;

这应该在开始枚举之前完成一次,无论是在构造函数中还是在循环之前的任何地方。