2013-10-09 64 views
0

我想知道如果讀取xml數據比從DataBase讀取更快.. 所以我準備了一個數據庫Sql compact 4.並創建了一個包含10000條記錄的表.. 也創建了一個xml包含相同10000個元素的文檔。XML vs Entity框架閱讀速度

,我決定閱讀和比較對各一個

的時間,所以我的代碼如下:

protected void btn_Click(object sender, EventArgs e) 
    { 
     int entTime = DateTime.Now.Millisecond; 

     Database1Entities1 ent = new Database1Entities1(); 

     foreach (var item in ent.ttts) 
     { 

      string x = item.id.ToString(); 
     } 

     entTime = DateTime.Now.Millisecond - entTime; 
     lblEntity.Text = "Entity reading: " + entTime.ToString(); 
     //---------------------------- 


     int xmlTime = DateTime.Now.Millisecond; 

     XDocument doc = XDocument.Load(Server.MapPath("/mydoc.xml")); 

     foreach (var item in doc.Root.Elements()) 
     { 
      string ss = item.Value; 
     } 


     xmlTime = DateTime.Now.Millisecond - xmlTime; 

     lblXL.Text = "xml reading: " + xmlTime.ToString(); 

}

結果讓我知道...做我出錯了?

在毫秒

XML讀數:7

實體讀數:117


XML讀數:5

實體讀數:113

==== =============

所以讀取XML文件比讀實體框架更快?

或我的數據不夠大?

您輸入的高度讚賞:)

編輯:

我開始使用秒錶,結果是一樣的..

然後我在DB增加了記錄號爲30000;還XML文件現在包含30000記錄......同樣的結果..

然後我申請的意見和作出的閱讀環路1000的時間......所以現在的代碼如下所示:

 Stopwatch sw = new Stopwatch(); 
     sw.Start(); 
     Database1Entities1 ent = new Database1Entities1(); 

     for (int z = 0; z < 1000; z++) 
     { 
      foreach (var item in ent.ttts) 
      { 

       string x = item.id.ToString(); 
      } 
     } 
     sw.Stop(); 

     lblEntity.Text = "Entity reading: " + sw.ElapsedMilliseconds; 

     //---------------------------- 
     sw.Reset(); 

     sw.Start(); 

     XDocument doc = XDocument.Load(Server.MapPath("/mydoc.xml")); 
     for (int z = 0; z < 1000; z++) 
     { 
      foreach (var item in doc.Root.Elements()) 
      { 
       string ss = item.Value; 
      } 
     } 
     sw.Stop(); 

     lblXL.Text = "xml reading: " + sw.ElapsedMilliseconds; 

和結果證實三次如下:

XML閱讀:678

實體閱讀:8095


XML閱讀:666

實體閱讀:73628


XML閱讀:671

實體閱讀:73006

+1

你的結果似乎沒有結果,目前還不清楚。平臺,硬盤等硬件都很重要。但是,在大多數情況下閱讀XML可能會更快。但現在嘗試查詢或更新... –

+0

當可執行文件設置爲調試並在Visual Studio中時,我發現EF速度較慢,但​​設置爲釋放並運行時沒有/ Visual Studio以外版本的速度較快x10。 –

+0

10000是非常小的..有1,00,000條記錄.. – Anirudha

回答

1

您沒有優化您的EF查詢。對於初學者,您可以關閉跟蹤。 EF會爲讀取的每個對象創建開銷以跟蹤更改。如果查詢僅用於讀取數據,則可以關閉跟蹤以提高性能。

0

從我的研究中,與所有其他存儲實體框架是緩慢的機制。如果你沒有特定的要求去使用數據庫,你可以使用xml。

通過ADO.NET的DataReader也會給出更好的結果。 DataSet選項與EF類似。