WPF PresentationFontCache. Что это? - PullRequest
1 голос
/ 05 мая 2010

У меня .Net 3.5 SP1 с разработкой в ​​WPF.

Всякий раз, когда я запускаю свое приложение WPF, я вижу, что процесс с именем «PresentationFontCache» появляется в моем списке процессов (в диспетчере задач). Процесс, хотя и выглядит безобидным, на самом деле находится в памяти даже после закрытия приложения WPF. Что это за процесс на самом деле? Что это делает?

Поэтому, когда я пытаюсь проверить использование памяти (многократно выполняя и закрывая приложение), процесс дает ощущение, что некоторая память все еще используется. Кроме того, я заметил, что этот процесс может отвратительно потреблять ресурсы (30% использования ЦП и / или 100 МБ памяти при определенных условиях !!!).

Я обнаружил службу Windows с именем «Windows Presentation Foundation Font Cache 3.0.0.0», которая, вероятно, отвечает за создание этого процесса. Этот сервис утверждает, что он оптимизирует производительность приложений WPF за счет кэширования часто используемых данных шрифтов. Приложения WPF запустят эту службу, если она еще не запущена. Его можно отключить, хотя это снизит производительность приложений WPF.

Но тогда почему служба Windows сама не закрывает процесс после закрытия приложения WPF.

Или же эти службы на самом деле кэшируют информацию о шрифтах, используемую для любых приложений WPF, так что в следующий раз любое из подобных приложений при повторном запуске будет использовать кэш без регенерации шрифтов для приложения? Если это так, разве это не тот тип данных, который нельзя собирать? Не является ли это вероятной причиной утечки памяти?

Пожалуйста, подожди меня.

Thx Vinit.

1 Ответ

2 голосов
/ 05 мая 2010

Этот сервис предназначен для повышения производительности приложений WPF и увеличения объема общих ресурсов между программами WPF (или различными экземплярами одной и той же программы). Источник доступен для него как часть Справочного центра исходного кода , и некоторую дополнительную информацию о производительности приложений WPF в целом можно найти здесь .

Есть отдельные случаи, когда эта служба вызывает проблемы, но из-за того, что она делает, я не думаю, что случайные скачки ЦП и использование памяти 100 МБ проблематично.

Вы можете безопасно отключить службу, если считаете, что она занимает слишком много ресурсов, но вам лучше профилировать / измерять, какое влияние это оказывает на ваше приложение.

...