すべて、
そのため、LINQ-to-SQLのselectクエリはすべて、CompiledQueriesを使用して処理を高速化しました。これまでのところselect文ではうまく機能しますが、insert、update、またはdelete文をプリコンパイルする方法を私は理解することができませんでした。
もちろん、LINQ-to-SQLで挿入、削除、または更新するときは、オブジェクトモデルを使用する必要があります。しかし、明らかにそれがクエリを生成する途中のどこかで、それは事前にコンパイルして静的メンバに格納するのに良いでしょう。
これは可能ですか?プリコンパイルされていない場合の更新、削除、挿入に対するLINQのパフォーマンスはどのようなものですか?私はそれがselectよりはるかに速いのを見ることができました、なぜなら彼らがその下でやることはずっと単純で、あまり「動的」ではありません...
大きな違いがあります。 Linq-to-SQL選択クエリは、大規模で複雑な式ツリーにすることができます。そのうちのいくつかは「コンパイル」を要するかもしれません。この場合、SQL Serverに対して実行できるT-SQLに合体します。そのため、操作の結果をキャッシュして再利用できるようにすることは理にかなっています。
ただし、他のDelete、Update、およびInsertは、式ツリーをT-SQLに変換する必要がない単純な操作です(LINQ自体はすべてクエリについてです)。これらの他の操作を実行するSQLコードを「クエリ」と見なすように訓練されているのは残念ですが、実際に情報を求めているわけではありません。
これらの操作はLINQではなくDataContextによってのみ定義されるため、これらの機能を実行するコードはすでにコンパイルされています。
削除はごく簡単なので(DELETE FROM Table WHERE Key ...)、UPDATEは変更されたフィールドのみを更新するため、更新操作ごとに異なるため、3つの挿入だけがコンパイルおよび再利用ができることに意味があります。
[)amien
L2Sは "sp_executeSQL"を使用するため、初めて実行した後はストアドプロシージャ実行プランキャッシュに格納されます。後続の実行(同じクエリで同じパラメータではない)は、キャッシュからコンパイルされたプランを再利用します。したがって、あなたが求めているものは「舞台裏」でSQL Serverによって自動的に処理されます。