管理対象外オブジェクトのリリースに関するクエリが1つあります。アンマネージドオブジェクトはCLRの直接管理下にないので、CLRはそれを直接解放することはできません。そのためにdisposeコマンドを呼び出しますが、そのアンマネージドオブジェクトに対してアプリケーションでdisposeコマンドを使用しなかった場合、 。未管理オブジェクトのメモリ管理
例: C#コードで接続オブジェクトを使用している場合
try
{
string strConnectionString = "";
strConnectionString = "Server=FTSPROD\\FTS_PROD;Database=tdps_uat;User ID=txnapp;password=txnapp;Min Pool Size=5;Max Pool Size=10000;";
for (int i = 0; i < 10000; i++)
{
SqlConnection cnUpdateTransaction;
cnUpdateTransaction = new SqlConnection(strConnectionString);
cnUpdateTransaction.Open();
cnUpdateTransaction.
//cnUpdateTransaction.Close();
}
}
catch (Exception Ex)
{
}
ここで私は10000インスタンスの接続オブジェクトを開き、ガベージコレクションのために残しています。さて、それらは管理されていないオブジェクトであり、私はこのオブジェクトがどのように解放されるかを最後に呼び出したり、処理したりしていません。オペレーティングシステムがこれと何かを行うかどうか。この問題については、文書リンクをご利用ください。
あなたは変数を ""に初期化してすぐにそれを別のものに設定することで、悪い習慣を守っています。 'using'ブロックを実装しないことで、コードに接続文字列を含めてコードを投稿する(ヒント:データベースのパスワードを今すぐ変更する**)。 –
私はあなたが言ったことすべてを認識していますが、ここに書かれたコードは非常に基本的なものであり、アンマネージド接続を複数回開いてdisposeまたはcloseメソッドを呼び出さなかった場合のこのアンマネージド接続オブジェクトのリリース方法を知りたいだけです。 。また、C#でこのクラス(SqlConnection)に実装されているファイナライザを見たことがありません – funsukvangdu