LINQtoSQLクエリの高速化に焦点を当てた記事を参照していました。言及されている手法の1つは、「コンパイル済みクエリの使用」であり、その使用方法を説明しています。
コンパイルされたクエリのパフォーマンスの向上を見たかったので、作成者が提供したのと同じ例を試しました。NorthwindDbをデータコンテキストとして使用しました。通常の実行とcompiledqueryの実行を試し、LINQPADで確認しました。
まず、 CompileQueryを使用せずにクエリを実行してみました。2.065秒かかりました。
var oo = from o in Orders
where o.OrderDetails.Any (p => p.UnitPrice > 100)
select o;
oo.Dump ("Order items with unit price more than $100");
var oo1 = from o in Orders
where o.OrderDetails.Any (p => p.UnitPrice > 10)
select o;
oo1.Dump ("Order items with unit price more than $10");
次に、CompileQueryを使用したクエリ。2.100秒かかりました。
var oo = CompiledQuery.Compile ((TypedDataContext dc, decimal unitPrice) =>
from o in Orders
where o.OrderDetails.Any (p => p.UnitPrice > unitPrice)
select o
);
oo (this, 100).Dump ("Order items with unit price more than $100");
oo (this, 10).Dump ("Order items with unit price more than $10");
それらを数回再実行すると、両方のアプローチにかかる時間はほぼ同じであることがわかりました。
ここでは、メソッドごとに2つのクエリ実行のみが表示されます。それぞれに10個のクエリを作成してみました。しかし、両方とも約7秒で完了しました。
クエリを事前にコンパイルすると、パフォーマンスが本当に向上しますか?それとも、使用条件を間違えていますか?
あなたの時間と配慮していただきありがとうございます。
編集:受け入れられた回答を読んだ後、読者は、コンパイルされたクエリがパフォーマンスをどのように改善するかをうまく説明しているこの記事 も読みたいと思うかもしれません。