2
當調用DbContext.SaveChanges()
時,是否有任何性能優勢來檢查是否有任何更改要保存?例如:SaveChanges()開銷
if (context.ChangeTracker.HasChanges())
context.SaveChanges()
或者這是種檢查的是EF內部執行時SaveChanges()
叫?
當調用DbContext.SaveChanges()
時,是否有任何性能優勢來檢查是否有任何更改要保存?例如:SaveChanges()開銷
if (context.ChangeTracker.HasChanges())
context.SaveChanges()
或者這是種檢查的是EF內部執行時SaveChanges()
叫?
在內部,EF會執行檢查以確定是否進行了更改,如果沒有更改,它將不會提交任何內容(因此不會浪費資源)。
我希望這有助於
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();
儘管此代碼可以回答這個問題,提供了關於如何和/或爲什麼它解決了這個問題將改善答案的長期價值附加的上下文。 – thewaywewere