2

私は、Oracleデータベースのストアドプロシージャを呼び出すために当社が使用するデータアクセスライブラリを更新する作業を行っています。ライブラリは現在、呼び出し元のアプリケーションが単一のOracleCommand(IDbCommand)オブジェクトと単一のOracleConnection(IDBConnection)を使用して複数の呼び出しを行うことを許可しています。これは、呼び出し元が呼び出しのパラメーターを追加し、呼び出しを行い、パラメーターをクリアして繰り返すことを意味します。終了すると、コンシューマーアプリケーションの呼び出しはdisposeを呼び出して、すべてをクリーンアップします。

ライブラリ内の「using」ステートメントを使用して、各呼び出しの後にコマンドと接続オブジェクトがクリーンアップされるようにすることで、物事をよりクリーンにすることができますが、これは、上記の機能が失われ、呼び出しごとに新しいコマンド/接続が作成されることを意味します。私が見つけたほとんどの例でこれが行われているのがわかりますが、通常は単純な例にすぎません。

私の質問:コマンドや接続を呼び出し間で維持できるようにすることは価値がありますか?毎回それらを再作成するのは非常に費用がかかりますか?

4

3 に答える 3

1

それはスケーラビリティについてです。コマンドを作成して破棄するためのコストは安価です。接続を開いたままにしておくことは、コストのかかる部分です。1000の開いている接続を保持している1000のアクティブなクライアントがある場合、それはデータベースの負荷です。私はしばしば接続オブジェクトを保持しますが、接続を閉じるだけです。これによりデータベースの負荷が軽減され、.NETで接続オブジェクトを保持するためのオーバーヘッドはほとんどありません。一般的なエンドユーザープログラムでは、接続はごく一部の時間しか使用されないため、使用されていないときに接続を閉じると、アクティブな接続が10個しかない場合があります。これで、データローダーのようなプログラムが1/2の時間接続を使用し、接続を開いたままにします。

于 2012-09-17T18:57:43.350 に答える
0

Blamに同意します。接続オブジェクトはデータアクセスクラスを使用して作成する必要があり、データベースへの呼び出しを実行する各メソッドは、メソッド間に何らかのトランザクション制御がない限り、データベースを開いたり閉じたりする必要がありますが、全体として、アプローチである単純なCRUDアクションの場合服用することをお勧めします

于 2012-09-18T09:04:44.277 に答える
0

OracleConnectionオブジェクトは、実際にはデフォルトで接続プールであることに注意してください。そのため、良好なパフォーマンスを維持しながら、実際に接続を開閉する作業を実行させることができます。プールのサイズと接続の存続期間を制御するために使用できる接続文字列属性はたくさんあります。

クリスチャンシェイ

オラクル

于 2014-03-06T02:13:10.563 に答える