LINQ対データセット-パフォーマンスに影響がありますか?
-
05-07-2019 - |
質問
既存のVB.NETアプリケーションをリファクタリングして、Linqを使用しています。正常に機能するようになりましたが、クライアントマシンで(1分以上)時間がかかります!
データベーステーブルには多くの行がありますが、同じマシン(データセットを使用)上のプログラムの古いバージョンでは5秒かかります。
Linqクエリは次のように非常に標準的です:
Dim query = From t As TRANSACTION In db.TRANSACTIONs _
ここで、t.transactionID = transactionID _
tを選択
1行または0行しか返されません。何か考えはありますか?
解決
時差が非常に大きいことに驚いています(5秒から60秒以上)。私は、TRANSACTIONエンティティがどれほど複雑であるかに依存すると思います。 LINQ to SQLは、結果セットの各行を処理してオブジェクトに変換し、状態追跡情報をDataContextに追加します。 DataSetは、生のデータを単に保存し、DataTableから読み取るときに、それを厳密に型指定されたデータに処理します。 L2Sでコストが12倍になるとは思っていませんが、多少の増加が予想されます。
他のヒント
貼り付けたコードは、実際にはデータベースにまったくアクセスしません。次に「クエリ」を使用すると、クライアントに転送されるデータの量が決まります。後でやっていることによって、LINQバージョンがデータセットバージョンよりも多くのデータをダウンロードしている可能性はありますか?
プロジェクトで同じ移行を行い、LINQから同等またはそれ以上のパフォーマンスしか見ていませんが、LINQバージョンがサーバーに対してより多くのラウンドトリップを実行している場合があります。 Count()を実行した後、2つの別個のサーバークエリとしてデータを取得します。通常、.ToList()を実行してデータを取得してから、ローカルでデータを取得します。舞台裏で何が起こっているのかを知るために、時々SQLプロファイラーを使用する必要があります。