2014年11月13日木曜日

WPFで、表示しないWindowを作るとメモリリーク発生か

WPFの設計思想をよくしらないのでアレなのですが、、、

作成したWindowをCloseしないとメモリリークの原因になり、アプリが終了しません。。。

namespace WpfApplication17 {
    /// <summary>
    /// App.xaml の相互作用ロジック
    /// </summary>
    public partial class App : Application {
        protected override void OnStartup(StartupEventArgs e) {
            Window w1 = new Window();
            w1.Close();
            Window w2 = new Window();
            w2.Close();
        }
    }
}

上の例はわかりやすいと思います。何も表示しないで終了するWPFアプリです。きちんと終了してくれます。

namespace WpfApplication17 {
    /// <summary>
    /// App.xaml の相互作用ロジック
    /// </summary>
    public partial class App : Application {
        protected override void OnStartup(StartupEventArgs e) {
            Window w1 = new Window();
            w1.Close();
            Window w2 = new Window();
            //w2.Close();  <-- 閉じないようにする
        }
    }
}

上の例はw2.Close()をコメントにしました。終了しません。

とにかく、作ったWindow等は
  • 表示したら、閉じる。
  • 表示しない場合は、意図的にClose()を呼ぶ。
これらをしない事には、アプリが終了しないという事でした。。。

0 件のコメント:

コメントを投稿