1

WPFで開発を行った.Net 3.5 SP1があります。

WPF アプリケーションを実行するたびに、「PresentationFontCache」という名前のプロセスがプロセス リスト (タスク マネージャー) に表示されます。このプロセスは無害に見えますが、実際には WPF アプリケーションが閉じられた後でもメモリ内に存在します。このプロセスは実際には何ですか?それは何をするためのものか?

そのため、(アプリケーションを何度も実行して閉じることによって) メモリ使用量を確認しようとすると、プロセスはメモリがまだ使用されているように感じます。また、このプロセスがひどくリソースを消費する可能性があることも観察しました (特定の条件下で 30% の CPU 使用率および/または 100 MB のメモリ使用率!!!)。

「Windows Presentation Foundation Font Cache 3.0.0.0」という名前の Windows サービスを見つけました。これは、おそらくこのプロセスの生成に関与しています。このサービスは、一般的に使用されるフォント データをキャッシュすることにより、WPF アプリケーションのパフォーマンスを最適化すると主張しています。このサービスがまだ実行されていない場合、WPF アプリケーションはこのサービスを開始します。無効にすることもできますが、無効にすると WPF アプリケーションのパフォーマンスが低下します。

しかし、WPFアプリケーションが閉じられた後、Windowsサービス自体がプロセスを閉じないのはなぜですか。

それとも、このサービスは実際に WPF アプリで使用されるフォント情報をまとめてキャッシュするので、次回再実行すると、同様のアプリのいずれかがアプリケーションのフォントを再生成せずにキャッシュを使用しますか? もしそうなら、それはガベージコレクションできないタイプのデータではありませんか? それがメモリ リークにつながる可能性のある原因ではないでしょうか。

私を照らしてください。

Thx Vinit。

4

1 に答える 1

2

このサービスは、WPFアプリケーションのパフォーマンスを向上させ、WPFプログラム(または同じプログラムの異なるインスタンス)間で共有されるリソースの量を増やすように設計されています。ソースは、リファレンスソースコードセンターの一部として利用できます。一般的なWPFアプリケーションのパフォーマンスに関する詳細については、こちらを参照してください。

このサービスが問題を引き起こす孤立したインスタンスがありますが、それが何をしているのかについては、時折のCPUスパイクと100MBのメモリ使用量が問題になるとは思いません。

リソースを大量に消費していると思われる場合は、サービスを安全に無効にすることができますが、アプリケーションにどのような影響があるかをプロファイリング/測定することをお勧めします。

于 2010-05-05T11:40:33.853 に答える