2013-02-27 193 views
30

哪一個性能更好? ADO.NET或實體框架。性能分析ADO.NET和實體框架

這些是我想分析的兩種方法。

ADO.NET測試方法

public void ADOTest() 
{ 
    Stopwatch stopwatch = Stopwatch.StartNew(); 
    using (SqlConnection con = new SqlConnection(connection)) 
    { 
     string Query = "select * from Product "; 
     SqlDataAdapter da = new SqlDataAdapter(Query, con); 
     DataSet ds = new DataSet(); 
     con.Open(); 
     da.Fill(ds); 
     DataView dv = ds.Tables[0].DefaultView; 
    } 
    stopwatch.Stop(); 
    Console.WriteLine("ADO.NET Time Elapsed={0}", stopwatch.Elapsed); 
} 

實體框架的測試方法

public void EFTest() 
{ 
    Stopwatch stopwatch = Stopwatch.StartNew(); 
    var list = _OnlineStoreEntities.Products.ToList(); 
    stopwatch.Stop(); 
    Console.WriteLine("Entity Framework Elapsed={0}", stopwatch.Elapsed); 
} 

結果在第一次執行

當我在更多跑這上面的方法比100倍。的平均執行時間被示出在圖像中:

first result

ADO.NET只用了2毫秒實體框架是否花了超過4毫秒。

結果在第二次執行

當我在一次運行中一次又一次跑了這種方法。 ADO.NET和EF之間的平均執行時間是不是更多:

second result

問題

  1. 我認爲EF給出了第一次執行最糟糕的表現那麼爲什麼我們使用EF?
  2. 爲什麼EF第二次執行比第一次執行更快?
+0

https://stackoverflow.com/questions/15107992/performance-analyze-ado-net-and-entity-framework – Omkar 2018-02-23 12:08:49

回答

51
  1. EF首次將元數據加載到內存中,這需要一段時間。它從edmx文件構建模型的內存表示,或者如果您首先使用代碼,則從源代碼構建。實際上EF是建立在ADO.NET的頂端,所以它不能更快​​。但它使發展更快。並且提高你的代碼的可維護性的
  2. 見1

採取MSDN上的文章Performance Considerations (Entity Framework)

+1

如果您使用LINQ從數據庫中提取或處理選擇性數據,EF會更快。一個大的或複雜的SQL查詢可以實現爲簡單的LINQ查詢,在EF中運行速度比ADO.NET快。我們不應該將ADO.NET與EF進行比較,只是爲了獲取簡單的數據。 – rafidheen 2015-12-24 06:34:00

+0

我認爲在涉及複雜查詢時,LINQ比SQL更簡單是相當主觀的。 – user441521 2018-02-13 15:52:03

10
  • 1)EF使得很多事情更舒適使用數據庫時的樣子。在引擎蓋下有很多事情要做,否則你必須手動編寫代碼。

例如,一個我的第一個大項目,正在處理大量的數據和我實現與ADO.NET接入層。這彌補了整個項目四分之一甚至三分之一的差距。

憑藉我今天的英孚教育經驗,我幾乎可以擺脫所有這些! 我只是用手完成很多複雜的代碼,完全不需要。我們在這裏談論數千行。

  • 2)主要有兩個原因在這裏。首先,EF建立在使用ADO.NET之上。這意味着EF的作用就是增加額外開銷,無論ADO會做什麼。第二個(非常)簡單地說,JIT編譯器第一次編譯代碼就在執行時。這包括內存分配和各種初始化。

這意味着您多次運行的代碼在第二次運行時運行得更快。另一方面,如果只執行一次EF查詢,那麼您將不會從這些初始化中獲益。

在實際應用中,你可能會嘗試做一些優化,例如使用Compiled Queries。性能明智這將幫助你很多,因爲現在你的查詢不需要準備和編譯每次你運行它們,但只有一次。

1

在微軟工作時,我寫了一篇博文來比較兩者的性能。似乎它正在被遷移過程中,所以你可能需要去互聯網檔案找到它...

我們專注於確保使用EF的性能成本並不可怕,而不是完美的V1,但相當實用。

雖然幾乎10年後的EF團隊已經做了很好的工作,提高了性能,特別是減少了不好的情況下的方案,由設計實體框架坐在了ADO.Net。因此,如果您的主要標準是原始性能,您應該使用手動優化的SQL來使用ADO.Net。這就是說,許多其他好的開發人員,不要製作最好的SQL;實體框架將它們與編寫查詢隔離開來,並使用良好實踐來產生相當好的查詢。

實體框架的主要優點是提供更高的抽象水平數據的工作,隔離底層數據模型的應用程序開發人員。所以你會使用EF來提高工作效率,編寫更少的數據訪問代碼;你仍然可以微調特定查詢或數據操作,而不會丟失,使編程更加容易在非性能關鍵代碼,這是任何企業aplication最大的部分,例如抽象。