1

私はデータベースに対して任意のスクリプトを実行する.NETプログラムに取り組んでいます。

同僚がデータベースアクセスコードを書き始めたとき、彼は1つのコマンドオブジェクトをアプリケーションの残りの部分に公開し、各ステートメントで再利用(設定CommandText/ Type、呼び出しなど)しました。ExecuteNonQuery()

毎回新しく解析されるため、これは繰り返される同一のステートメントのパフォーマンスに大きな打撃を与えると思います。

しかし、私が疑問に思っているのは、各ステートメントが前のステートメントと異なる場合(パラメーターが異なるだけでなく、ステートメントがまったく異なる場合)、実行速度も低下するのでしょうか?ドキュメントでその答えを簡単に見つけることができませんでした。

ところで、使用されるRDBMSはOracleですが、この質問は実際にはデータベース固有のものではないと思います。

PS同じCommandオブジェクトを公開することはスレッドセーフではないことを私は知っていますが、それはここでは問題ではありません。

4

2 に答える 2

2

新しいコマンドオブジェクトの作成にはいくらかのオーバーヘッドが伴うため、特定の状況では、同じコマンドを再利用することが理にかなっている場合があります。しかし、アプリケーション全体に適用される一般的なケースとしては、少し奇妙に思えます。

于 2009-08-27T15:30:18.690 に答える
1

パフォーマンスへの影響は通常、データベースへの接続を確立することによって発生しますが、ADO.NETはここで役立つ接続プールを作成します。

毎回ステートメントを新たに解析することを避けたい場合は、それらをストアドプロシージャに入れることができます。

あなたの同僚は、コマンドオブジェクトを再利用することで違いが生じた他のプラットフォームでの作業から受け継いだ、古いスタイルのアプローチを使用していると思います。

于 2009-08-27T15:26:57.667 に答える