2017-05-31 76 views
2

當調用DbContext.SaveChanges()時,是否有任何性能優勢來檢查是否有任何更改要保存?例如:SaveChanges()開銷

if (context.ChangeTracker.HasChanges()) 
    context.SaveChanges() 

或者這是種檢查的是EF內部執行時SaveChanges()叫?

回答

2

在內部,EF會執行檢查以確定是否進行了更改,如果沒有更改,它將不會提交任何內容(因此不會浪費資源)。

0

我希望這有助於

Stopwatch sw = new Stopwatch(); 
 
Stopwatch sw2 = new Stopwatch(); 
 

 
sw.Start(); 
 
    var b = db.ChangeTracker.HasChanges(); 
 
sw.Stop(); 
 

 
sw2.Start(); 
 
    var c = db.SaveChanges(); 
 
sw2.Stop(); 
 

 

 

 
Console.WriteLine("Elapsed(HasChanges)={0}", sw.Elapsed); //takes 0.0000889 miliseconds 
 
Console.WriteLine("Elapsed(SaveChanges)={0}", sw2.Elapsed); // takes 0.0003563 miliseconds 
 
Console.ReadLine();

+0

儘管此代碼可以回答這個問題,提供了關於如何和/或爲什麼它解決了這個問題將改善答案的長期價值附加的上下文。 – thewaywewere