2016-05-02 10 views
2

MVVM Light ToolkitベースのWindows WPFアプリケーションでINavigationを実装しています。ページのライフサイクル

private Frame GetFrame() 
{ 
    return (Application.Current.MainWindow as Generator.MainWindow).MainFrame; ; 
} 

public void NavigateTo(string pageKey) 
{ 
    CurrentPageKey = pageKey; 
    var obj = Activator.CreateInstance(_keyPageTypeMapping[pageKey]); 
    GetFrame()?.Navigate(obj); 
} 

私は新しいページに移動すると、新しいページが作成され、表示されます。これは、NavigateToの実装です。しかし、離れて移動すると、古いページのデストラクタが呼び出されたことはありません。 10〜20回の航行の後でさえ私はそれを見ない。私はアプリケーションを終了した後、デクストラクタが呼び出されるのを見るだけです。質問は、古いページを処分する最良の方法は何ですか?

+1

「廃棄」または_ファイナライザ_を意味しますか?あなたはそれを処分する必要がありますか?どのようなリソースは、その必要性を処理するために保持しているのですか? –

+0

私はファイナライズを気にしないので、Disposeと思います。オブジェクトがどこかに保持されていないという兆候が必要なだけです。リソースは主にUIオブジェクトですが、メモリにスタックするとコストがかかる可能性があります。 – Pablo

+0

あなたのフォームが管理されていないリソース、または 'IDisposable'を実装するマネージドリソースを使用していない限り、ガベージコレクタがその仕事をすることを信頼する以外に何もしません。それは、必要なときにオブジェクトをメモリから解放します。 –

答えて

0

あなたがやっていることはうまくいくはずです。ガベージコレクタがまだページを廃棄していない場合、まだその必要はありません。これらの古いページがガベージコレクションできるかどうか、またはコレクションを強制的に実行させたい場合には注意が必要です。明示的にガベージコレクタを呼び出してください:

GC.Collect(); 
+0

'GC.Collect()'はオブジェクトを強制的に破棄しませんでした。これらのオブジェクトは、ナビゲーションエコシステムのために実際に処分されていないと私はいくつかの推測を持っています。私のウィンドウの上に、IE7形式のナビゲーションが表示されています。ボタン。おそらくフレームワークは生きている必要がありますか?単一のディスポジション記号を使わずにたくさんの新しいオブジェクトを作成すると、私は気になる... – Pablo

関連する問題