簡體   English   中英

處置DataServiceContext?

[英]Disposing DataServiceContext?

我已經創建了一個讀取CSV文件,創建DataServiceContext並將大量數據插入到我的遠程OData API服務器的應用程序。

但是,在運行30,000條記錄的導入后5分鍾,我發現該應用程序仍在使用750MB的內存!

我應該采取什么措施來減少內存使用量? 或者至少讓它更早地進行垃圾收集? 它似乎沒有實現IDisposable ,並且我的google-fu讓我失敗了。 謝謝。

如果對任何人有幫助,我在處理清除上下文后就一直在使用它。

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

我在Microsoft.OData.Client.DataServiceContext類中遇到了類似的問題,該類看起來類似於System.Data.Services.Client.DataServiceContext。

發生的事情是,DataServiceContext有一個EntityTracker,用於跟蹤對要迭代的實體所做的任何更改。 環顧四周后,我看到DataServiceContext具有MergeOption屬性。 要解決您的問題,請將其設置為NoTracking,如下所示:

dsc.MergeOption = MergeOption.NoTracking;

應該在開始枚舉之前完成一次,無論是在構造函數中還是在循環之前的任何地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM