0

私のアプリケーションには、多数の oledbConnections とデータ テーブルとデータ ソースと、さらに多くのアンマネージ リソースがあります。そのうちのいくつかは (不要になったときに Dispose() を呼び出すことによって) 破棄され、別のリソースには Dispose() がありません (コード行をより少なくするためだけに!) . 問題は、これらの管理されていないリソースを使用後に破棄しない場合、アプリケーションに問題はありますか?

「appname was stopped working ..」というエラーが時々(常にではありません)ありますが、このエラーは un Disposed オブジェクトが原因ですか?

最後に、Dispose() を呼び出したときにエラーが発生した場合はどのような場合ですか?

ありがとうございました。

4

2 に答える 2

2

これは、管理されていないリソースが何であるかにある程度依存します。データベース接続の場合は、最終的に接続が不足します。つまり、接続プール内のすべての接続が開かれますが、使用されません。その時点で、データベース サーバーは新しい接続を許可しません。そのため、データベースに接続できなくなります。

他のタイプのリソースでも同様の問題が発生します。それらをリークし、あらゆる種類の奇妙でデバッグが困難な状況に陥る可能性があります。

ベスト プラクティスは、クラスを使い終わったときに、常にDisposeor Closeif クラスにそのメソッドがあるかどうかを呼び出すことです。usingC# では、まさにこの理由でステートメントを使用できます。VB.net の同等の構文が何であるかはわかりませんが、それが何であれ、それを使用する必要があります。

于 2013-02-05T19:07:32.580 に答える
0

使い終わったら、すべてを破棄することが常にベスト プラクティスです。dispose を使用すると、マネージド リソースとアンマネージド リソースがクリーンアップされます。これらを適切に破棄しないと、問題やメモリ リークが発生し、エラー メッセージが表示される原因となる可能性があります。Dispose() メソッドを追加するだけです :) 数行のコードを追加するだけで、最終的に節約できます。

于 2013-02-05T19:09:45.210 に答える