2

デスクトップアプリケーション(C#)でファイルの保存/開くダイアログを使用しています。初めてダイアログを開くと、ハンドルが 100 ずつ増えます。ダイアログを閉じた後、ハンドルは減りません。次回以降、ハンドルは 10 ほど増加し、2 ~ 4 に減少しています。

dispose を呼び出して null にすることで、ハンドルを減らしてみました。また、ブロックを使用してみました。しかし、それらのどれも問題を解決しませんでした。

これに対する回避策を教えてください。または、任意のカスタム コントロールなどを使用できますか

これについてアドバイスをお願いします

前もって感謝します

コード: コードは

SaveFileDialog objSaveDialog = new SaveFileDialog();
try
{

    objSaveDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    objSaveDialog.Title = "Save to Text File";
    //objSaveDialog.ShowDialog();
    DialogResult dlgResult = objSaveDialog.ShowDialog();
    objSaveDialog.Dispose();
    if (dlgResult == DialogResult.OK)
    {
        string strSaveFilePath = objSaveDialog.FileName;

        if (!string.IsNullOrEmpty(strSaveFilePath))
        {
            TextWriter myTxtWriter = new StreamWriter(strSaveFilePath, false);
            for (int index = 0; index < 10000; index++)
            {
                myTxtWriter.WriteLine("sample text.....................................");
            }

            myTxtWriter.Flush();
            myTxtWriter.Close();
            myTxtWriter.Dispose();

        }
    }
}
finally
{
    if (objSaveDialog != null)
    {
        objSaveDialog = null;
        //((IDisposable)objSaveDialog).Dispose();
    }
}
4

1 に答える 1

6

シェル ダイアログを開くと、多くのコードがプロセスに読み込まれます。マシンにインストールされているすべてのシェル拡張ハンドラー。あなたが書いていないコード。[プロジェクト + プロパティ] の [デバッグ] タブで [アンマネージ コードのデバッグを有効にする] オプションをオンにすると、[出力] ウィンドウに読み込まれていることがわかります。

これらのシェル拡張ハンドラの誤動作やリソースのリークは、決して珍しいことではありません。SysInternals の AutoRuns ユーティリティを使用して、それらを無効にすることができます。Microsoft によって作成されていないものから始めます。

于 2011-09-21T12:33:09.730 に答える