2012-02-08 13 views
4

誰かがなぜLinq-to-SQLが速くデータを取得するのか教えてください。Linq-to-SQLのデータ検索速度の比較

Linq-to-SQL,EF4,DataSetおよびMyORMでパフォーマンステストを行いました。

Linq-to-SQL

は常に高速である、下記の表を参照してください。

  • Linq-to-SQL = 570ミリ秒50000件のレコードを取得するために50000のレコードの
  • EF4 = 1.200ミリ秒を取得するために50000のレコードの
  • DataSet = 2.100ミリ秒を取得するために、
  • MyORM = 50000レコードを取得するのに700ミリ秒

SQL Server 2005(ローカル)と分析用に1つのテーブルを使用しました。

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コードの一部を公開したい場合があります。

関連する問題