程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> ado.net entity framework查詢性能比較

ado.net entity framework查詢性能比較

編輯:關於.NET

關於ado.net entity framework 性能比較網上也有很多,這裡我只是初步的 介紹下ado.net entity framework使用不同的方法查詢數據的不同性能

第一部分:重復查詢單個實體

第一種:Linq To Entitiess

代碼如下:

static void Main(string[] args)
         {
             DateTime time1;
             DateTime time2;
             time1 = DateTime.Now;
             NorthwindEntities context = new  NorthwindEntities();
             for (int i = 0; i < 1000; i++)
             {
                 var data = (from c in  context.Customers where c.CustomerID == "ALFKI" select  c).FirstOrDefault();
                 string addr = data.Address;
             }
             time2 = DateTime.Now;
             Console.WriteLine((time2-time1).ToString ());
         }

查詢使用時間為6.2秒左右

第二種:使用Entity SQL

static void Main(string[] args)
         {
             DateTime time1;
             DateTime time2;
             time1 = DateTime.Now;
             NorthwindEntities context = new  NorthwindEntities();
             for (int i = 0; i < 1000; i++)
             {
                 var data =  context.Customers.Where("it.CustomerID=@Id", new  System.Data.Objects.ObjectParameter("Id", "ALFKI")).FirstOrDefault ();
                 string addr = data.Address;
             }
             time2 = DateTime.Now;
             Console.WriteLine((time2-time1).ToString ());
         }

查詢使用時間為6.2秒左右

第三種:使用EntityKey 來查詢

static void Main(string[] args)
         {
             DateTime time1;
             DateTime time2;
             time1 = DateTime.Now;
             NorthwindEntities context = new  NorthwindEntities();
             for (int i = 0; i < 1000; i++)
             {
                 var data =  context.GetObjectByKey(new System.Data.EntityKey ("NorthwindEntities.Customers", "CustomerID", "ALFKI")) as  Customers;
                 string addr = data.Address;
             }
             time2 = DateTime.Now;
             Console.WriteLine((time2-time1).ToString ());
         }

查詢使用時間為1秒,沒錯是一秒

總結:

前兩種方法查詢所使用的時間都差不多為6.2秒,時間比較長,但是使用第三 種方法查詢數據僅僅使用了1秒,為什麼會相差那麼多,區別在於前兩種方法每次 查詢都要從數據庫中查找,1000次查詢每次的查詢時間都一樣,但是第三種方法 只有第一次是從數據庫中查數據,後面的999次都是在context通過主鍵直接取數 據,速度當然會快很多啦,EF4.0之前的實體當含有外鍵引用時是自動生成對象引 用的,而EF4.0現在多了一個外鍵ID,這樣我們可以很方便的通過外鍵來查詢數據

第二部分:查詢不同是實體

第一種:Linq To Entitiess

static void Main(string[] args)
         {
             DateTime time1;
             DateTime time2;
             NorthwindEntities context = new  NorthwindEntities();
             //先將Customers所有的主鍵查詢出來
             List<string> keys =  context.Customers.Select(c => c.CustomerID).Distinct().ToList ();
             //和上面的context以作區別
             NorthwindEntities  context_ = new  NorthwindEntities();
             time1 = DateTime.Now;
             foreach (var key in keys)
             {
                 var data =  context_.Customers.Where(c => c.CustomerID ==  key).FirstOrDefault();
                 string addr = data.Address;
             }
             time2 = DateTime.Now;
             Console.WriteLine((time2 -  time1).ToString());
         }

查詢使用時間0.68秒左右

第二種:使用Entity SQL

static void Main(string[] args)
         {
             DateTime time1;
             DateTime time2;
             NorthwindEntities context = new  NorthwindEntities();
             //先將Customers所有的主鍵查詢出來
             List<string> keys =  context.Customers.Select(c => c.CustomerID).Distinct().ToList ();
             //和上面的context以作區別
             NorthwindEntities  context_ = new  NorthwindEntities();
             time1 = DateTime.Now;
             foreach (var key in keys)
             {
                 var data =  context_.Customers.Where("it.CustomerID=@Id", new  System.Data.Objects.ObjectParameter("Id", key)).FirstOrDefault();
                 string addr = data.Address;
             }
             time2 = DateTime.Now;
             Console.WriteLine((time2 -  time1).ToString());
         }

查詢使用時間0.5秒左右

第三種:使用EntityKey 來查詢

static void Main(string[] args)
         {
             DateTime time1;
             DateTime time2;
             NorthwindEntities context = new  NorthwindEntities();
             //先將Customers所有的主鍵查詢出來
             List<string> keys =  context.Customers.Select(c => c.CustomerID).Distinct().ToList ();
             //和上面的context以作區別
             NorthwindEntities  context_ = new  NorthwindEntities();
             time1 = DateTime.Now;
             foreach (var key in keys)
             {
                 var data =  context_.GetObjectByKey(new System.Data.EntityKey ("NorthwindEntities.Customers", "CustomerID", key)) as  Customers;
                 string addr = data.Address;
             }
             time2 = DateTime.Now;
             Console.WriteLine((time2 -  time1).ToString());
         }

查詢時間為0.18秒左右

總結:

通過比較第三種方法仍然比前兩種來的快,查詢效率更高

使用EntityKey來查詢數據比其他兩種方法來的更快,而且不是快一點點,而 是相差有好幾倍,這裡的比較並沒有使用存儲過程來比較查詢,但是從這裡我們 可以看出,在平常的應用中如果知道實體的主鍵盡量用主鍵來查詢。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved