处理 DataServiceContext?

Disposing DataServiceContext?

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

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

我应该做些什么来减少内存使用量?或者至少让它更早地收集垃圾?它似乎没有实现 IDisposable,而我的 google-fu 让我失望了。谢谢。

我对 Microsoft.OData.Client.DataServiceContext class 也有类似的问题,看起来与 System.Data.Services.Client.DataServiceContext 相似。

发生的事情是 DataServiceContext 有一个 EntityTracker,用于跟踪对被迭代的实体所做的任何更改。环顾四周后,我看到 DataServiceContext 有一个 MergeOption 属性。要解决您的问题,请将其设置为 NoTracking,如下所示:

dsc.MergeOption = MergeOption.NoTracking;

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

如果它对任何人有帮助,我在处理后一直在使用它来清除上下文。

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);
    }
}