WPF で開発されたアプリケーションがあるとします。アプリケーションを実行して最小化すると、しばらくして (30 分以上とします)、アプリケーションのウィンドウを復元すると、しばらくの間フリーズ (または低速) していることがわかります。数秒。
私の質問は、なぜ遅くなるのか、それを修正する方法はありますか?
これは WPF のプロパティではなく、仮想メモリのプロパティです。
基本的に、最新のオペレーティング システムはプログラムをできるだけ高速に実行しようとしますが、多くのプログラムを一度に実行することもできます。すべてのメモリがわずかな RAM に一度に収まるわけではありません。そのため、実行中のプログラムがメモリの新しいページを割り当てる必要があることを OS が認識すると、RAM がすでにページでいっぱいになっている場合、OS はページの 1 つ (しばらく使用されていないページを優先) をハードディスクにキックします。ページファイルと呼ばれるファイル。
そのメモリ ページが属していたプログラムがそれにアクセスしようとすると、これは「ページ フォールト」と呼ばれます。OS はページが RAM ではなくディスク上にあることを検出し、実行を続行する前に RAM に読み込む必要があります。ハードディスクからの読み取りは RAM からの読み取りよりも遅いため、これは比較的低速です。プログラムがしばらく実行されていない場合、そのすべてのページが RAM にページアウトされていると考えられます。そのため、ページ フォールトが発生しなくなるまでプログラムは遅くなります。
この問題に対処する方法については経験がありませんが、次のようなことを試すことができます。
1) 非同期で動作するようにプログラムを作成する - そのため、1 つのスレッドがページ フォールトをトリガーする処理を実行している間、プログラムは他のスレッドで応答します。
2) メモリのすべてのページに意図的にアクセスして、ページインを維持する (プログラムが非常に重要で、使用していないときでも常に RAM を占有するに値する場合にのみお勧めします!)
3)「ハードウェアを投げる」ソリューション-RAMを購入します:)