5

私のアプリケーションにはパフォーマンスの問題があるので、ルートからこれを調査し始めました:「データベースとの接続」。

ベストプラクティスには、「接続を開き、それを使用して、できるだけ早く閉じる」と書かれていますが、これが引き起こすオーバーヘッドがわからないため、質問は次のとおりです。

1-「ODP.NETを使用する最善のアプローチは、できるだけ早く接続を開き、使用し、閉じることですか?」

2-ODP.NETで接続プールを使用する方法と方法はありますか?いくつかの接続文字列を格納するリストを作成し、必要なたびに「最適な」接続を選択するロジックを作成することを考えています。これはそれを行うための最良の方法ですか?

4

3 に答える 3

6

オラクルが推奨するベストプラクティスを含むスライドデッキは次のとおりです。

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

OracleConnectionを作成すると、接続プールが自動的に取得されます。ほとんどの中間層アプリケーションでは、それを利用する必要があります。また、レジストリでパフォーマンスカウンターをオンにして、現実的なワークロードに合わせてプールを調整することもできます。

接続プールの詳細については、ODP.NETオンラインヘルプを参照してください。プール設定が接続文字列に追加されます。

OracleConnectionsで多くの人が遭遇するもう1つの問題は、ガベージコレクターが、それらがどれほどリソースを大量に消費するかを認識せず、それらを迅速にクリーンアップしないことです。これは、ODP.NETが完全に管理されていないため、一部のリソースがガベージコレクターから隠されているという事実によってさらに複雑になります。したがって、ベストプラクティスは、すべてのOracle ODP.NETオブジェクト(OracleConnectionを含む)をClose()およびDispose()して、それらを強制的にクリーンアップすることです。

この特定の問題は、オラクルのフルマネージドプロバイダーで軽減されます(ベータ版はまもなくリリースされます)

(編集:ODP.NET、マネージドドライバーが利用可能になりました。)

クリスチャンシェイ

オラクル

于 2012-04-14T20:02:06.747 に答える
1

ODP.NETは、ADO.NETのデータプロバイダーです。ADO.Netのベストプラクティスは、開く、データを取得する(メモリに)、閉じる、メモリデータで使用することです。たとえば、OracleDataReaderを使用して、メモリ内のDataTableにデータをロードし、接続を閉じます。

[]の

于 2012-04-12T16:58:13.927 に答える
0

単一のトランザクションの場合、これは最善ですが、最後にコミットする複数のトランザクションの場合、これは最善の解決策ではない可能性があります。トランザクションがコミットまたはロールバックされるまで、接続を開いたままにしておく必要があります。それをどのように管理し、その場合に接続がまだ存在することをどのように確認しますか?(つまり、ネットワーク障害)この時点では機能しないConnectionState.Brokenプロパティがあります。

于 2012-12-18T22:16:24.930 に答える