2017-05-31 53 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