WPF PresentationFontCache. Что это?
У меня.Net 3.5 SP1 с разработкой сделано в WPF.
Всякий раз, когда я запускаю свое приложение WPF, я вижу, что процесс с именем "PresentationFontCache" появляется в моем списке процессов (в диспетчере задач). Этот процесс, хотя и выглядит безобидным, фактически сохраняется в памяти даже после закрытия приложения WPF. Что это за процесс на самом деле? Что оно делает?
Поэтому, когда я пытаюсь проверить использование памяти (выполняя и закрывая приложение много раз), процесс дает ощущение, что некоторая память все еще используется. Также я заметил, что этот процесс может стать жадным до ресурсов (30% использования ЦП и / или 100 МБ памяти при определенных условиях!!!).
Я обнаружил службу Windows под названием "Кэш шрифтов Windows Presentation Foundation 3.0.0.0", которая, вероятно, отвечает за создание этого процесса. Этот сервис утверждает, что он оптимизирует производительность приложений WPF за счет кэширования часто используемых данных шрифтов. Приложения WPF запустят эту службу, если она еще не запущена. Его можно отключить, хотя это снизит производительность приложений WPF.
Но тогда почему служба Windows сама не закрывает процесс после закрытия приложения WPF.
Или же эти службы на самом деле кэшируют информацию о шрифте, используемую для любых приложений WPF, так что в следующий раз любое из подобных приложений при повторном запуске будет использовать кэш без регенерации шрифтов для приложения? Если это так, разве это не тот тип данных, который нельзя собирать? Не является ли это вероятной причиной утечки памяти?
Пожалуйста, дайте мне право.
Спасибо Винит.
1 ответ
Этот сервис предназначен для повышения производительности приложений WPF и увеличения объема общих ресурсов между программами WPF (или различными экземплярами одной и той же программы). Источник доступен для него как часть Центра справочных исходных кодов, и дополнительную информацию о производительности приложений WPF в целом можно найти здесь.
Есть отдельные случаи, когда эта служба вызывает проблемы, но из-за того, что она делает, я не думаю, что случайные скачки ЦП и использование памяти 100 МБ проблематично.
Вы можете безопасно отключить службу, если считаете, что она требует слишком много ресурсов, но вам лучше профилировать / измерить, какое влияние это оказывает на ваше приложение.