2012-02-08 106 views
4

有人告訴我爲什麼Linq-to-SQL如此之快以檢索數據?Linq-SQL數據檢索速度比較

我做了Linq-to-SQL,EF4,DataSetMyORM的性能測試。

Linq-to-SQL總是更快,請參閱下表:

  • Linq-to-SQL = 570毫秒來檢索50000個記錄
  • DataSet = 2.100毫秒來檢索50000個記錄
  • EF4 = 1.200毫秒來檢索50000個記錄
  • MyORM = 700毫秒檢索50000條記錄

我用SQL Server 2005(本地)和一張表進行分析。

MyORM由我實施。是一種使用DataReader和Fasterflect填充IList of T屬性的簡單方法。

Linq-to-SQL有這種表現的策略是什麼?

回答

2

LINQ to SQL執行一些技巧。如果你自己的ORM使用反射,那麼你需要緩存,但我懷疑這種差異可能是你沒有緩存序號。

例如而不是

while(dataReader.Read()) { 
    ... 
    myNewObj.SomeProperty = dataReader.GetInt32(dataReader.GetOrdinal("SomeField")); 
    ... 
} 

爲每個序變量和引用它們的循環中:

var someFieldIdx = dataReader.GetOrdinal("SomeField"); 
... 
while(dataReader.Read()) { 
    ...  
    myNewObj.SomeProperty = dataReader.GetInt32(someFieldIdx); 
    ... 
} 

更妙的是對它們進行緩存一些靜態變量。

如果您已經這麼做了,您可能需要發佈一些實例化對象的ORM代碼。