簡體   English   中英

實體框架性能不一致

[英]Entity Framework performance inconsistency

我的MVC應用程序中有一個方法,該方法使用Entity Framework插入調查結果。 該調查涉及大約70個問題,所有結果都會插入到對SaveChanges的一次調用中。

// mock code
public class SurveyService {
    public SurveyService(MyDbContext db) { ... }

    public void SaveSurvey(...) {

        foreach(var result in results) {
            db.Results.Add(new Result(...));
        }

        db.SaveChanges();
    }
}

我不是在循環中調用SaveChanges。 只需添加一堆實體並執行一次SaveChanges。 代碼並不是很慢,但是每個INSERT大約需要20毫秒。 當您有70個實體時,總共需要1.4秒。

我可以在LinqPad中使用同一類(使用程序集創建連接),然后執行以下操作:

// in linqpad this refers to the context
var survey = new SurveyService(this);

survey.SaveSurvey(...);

使用完全相同的web.config,指向相同的數據庫並保存相同的結果,每次保存大約需要2-3 ms。 我已經檢查了變更跟蹤器,並且上下文之間沒有任何區別,它使用的是完全相同的代碼,所以我不確定開銷在哪里。 我添加了數據庫日志記錄,並且可以一致地看到,在應用程序中運行時,查詢速度要慢10倍左右。

是什么導致性能上的不一致?

里克·斯塔爾(Rick Stahl)在http://weblog.west-wind.com/posts/2013/Dec/22/Entity-Framework-and-slow-bulk-INSERTs上討論了此類問題,他認為問題在於ef中的變更跟蹤機制並提出一些解決這些問題的方法

暫無
暫無

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

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