2009-03-14 13 views

答えて

13

他の二つのオプション:さらに

command.Parameters.AddWithValue("@Foo", Foo); 

command.Parameters.Add("@Foo").Value = Foo; 

、私はそれらのいずれかの間の速度差は、あなたがそれに基づいて選択する必要があることを十分だろうとは思いません。あなたとあなたのチームにとって最も読みやすいものを選んでください。

9

厳密に言えば、intのオーバーロードを使用する方が高速です。これは、基になるコレクションが配列として格納され、整数オフセットを使用するためです。文字列のオーバーロードを呼び出すと、パラメータがintに変換され、intのオーバーロードが本質的に呼び出されます。

実際の質問は「重要ですか」ですか?非常に多くのパラメータがある場合を除いて、これは大変重要なことではありません。そしてそれでも、プロファイラがそれを言うまで、それが問題であることを確認することはできません。

+0

「それは問題ですか」 - これはほとんどの場合、タイトなループで数十回実行される操作ではありません..... –

4

パラメータを作成してから追加してから、フィルする必要はありません。これはすぐに完全に扱いにくくなります。

「ベストプラクティス」のアプローチはAddWithValueを使用することです:

command.Parameters.AddWithValue("@ParamName", Value); 

限り「スピード」が行くように、これは時期尚早の最適化の古典的なケースです。全体的なデザインにはまだまだ多くの作業が必要なときに、このような小さなスピードの違いに集中する必要はありません。

1

速度に関係なく番号付きパラメータを使用する際の問題は、基礎となるストアドプロシージャのパラメータの順序が変更された場合、コードに再コンパイルが必要になることです。

procが2つの異なるコードから使用されているとしますが、2番目の使用方法を認識していない場合は、パラメータリストの中央にデフォルト値を持つ新しいパラメータを追加します。番号の付いたパラメータを使用していたため、広告が壊れてしまったばかりです。

質問はより速いです。あなたがそのストアドプロシージャを非常に難しくしない限り、スピードの差はおそらく比較的小さいので、より堅牢なのが問題です。おそらく、このような小さな最適化を探すのではなく、システムを最適化するための解決策を考え出す必要があることを意味します。

関連する問題