释放数据服务上下文
本文关键字:上下文 服务 数据 释放 | 更新日期: 2023-09-27 18:35:23
我创建了一个应用程序,该应用程序可以读取CSV
文件,创建DataServiceContext
并将数据批量插入我的远程OData
API服务器。
但是,在运行30,000
记录导入 5 分钟后,我发现该应用程序仍在使用 750MB 的内存!
我应该做些什么来减少内存使用量?或者至少早点把它垃圾收集起来?它似乎没有实现IDisposable
,我的谷歌福让我失望了。谢谢。
我在使用Microsoft.OData.Client.DataServiceContext类时遇到了类似的问题,该类看起来类似于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);
}
}