0

いくつかのリソース リーク (具体的には Oracle 接続) をデバッグしようとしています。

ローカル マシンで Page_Load() を実行すると、v$session を監視することで、データベースで作成された接続を確認できます。

Page_Load から出るとすぐに、すべての接続が閉じられます。

開発サーバー (W3k、IIS6) で実行されている同じコードはリソースを解放しません - データベースによる接続はまだ存在します。

接続プールを有効にして、または有効にせずにこれを試しましたが、同じです-ローカルでは問題ありませんが、サーバーではリークします。

.net フレームワークが両方の場所で同じであり、コードも同じであることを確認しました。私は何が欠けていますか?

4

2 に答える 2

2

ガベージ コレクターには、サーバー GC、ワークステーション GC コンカレント、およびワークステーション GC 非コンカレントという 3 つの異なる動作モードがあります。それぞれが異なる方法で動作し、さまざまなタイプのアプリケーションに最適化されています。これが、異なる動作の原因となっている可能性があります。具体的には、単一の CPU があるか複数の CPU があるかに基づいて、特定の設定の動作を変更できます。より詳細な説明については、Tess Ferrandez のブログをご覧ください

于 2009-06-15T22:21:29.393 に答える
0

.NET で限られたリソース (データベース接続など) を使用していて、リソースがクリーンアップされることを期待している場合は常に、オブジェクトで Dispose() を明示的に呼び出して、オブジェクトがクリーンアップされ、適切に解放されるようにする必要があります。

Visual Studio のガベージ コレクションの変更に関しては、なぜそうなるのかわかりません。メモリ プロファイルが異なる別のマシンで実行しているため、ガベージ コレクタの動作が異なる場合があります。特にマシン間で、ガベージ コレクターが定義された方法で動作することは期待できません。しかし、データベース接続を適切に破棄しないという大きな問題があるようです。

于 2009-06-15T21:28:07.463 に答える