У нас есть приложение С# WPF, написанное на .Net 4.0, которое имеет относительно простую привязку данных и функциональность сетки.
Стилирование вызывает несколько "хитростей", включая некоторые цвета наведения и т.д.
На 3 машинах из развертывания, охватывающего 20, мы сталкиваемся с некоторыми очень странными проблемами производительности с пользовательским интерфейсом.
Эффективно после перезагрузки приложение работает хорошо, но после определенного (неопределенного) количества времени пользовательский интерфейс становится невероятно вялым. Например, наведите указатель мыши на кнопку, и будет задержка до нескольких секунд, прежде чем будет наложена/отображена цветовая стилизация наведения.
Машины имеют почти идентичные спецификации. Драйверы графики были обновлены, а установка starndard - две карты NVidia Quadro 290. Кроме того, мы сделали тестовое приложение, содержащее ТОЛЬКО некоторые тестовые компоненты пользовательского интерфейса (включая Fluent Ribbon) и отсутствие кода. Проблема все еще возникает.
Я запустил Windows Performance Suite для "глубокого погружения" в WPF среды исполнения, и, что очень странно, пользовательский интерфейс возвращается к нормальной реакции, если отмечен флажок "Disable Dirty Region Support". Я понимаю, что, если что-нибудь, это должно еще больше снизить производительность.
Я не могу ничего другого попробовать здесь. Анализ производительности DotTrace предполагает, что большая часть времени приложения расходуется в PresentationFramework.dll.
[EDIT] Все компьютеры - Windows XP SP3.
[РЕД.] Возможно, это происходит на всех машинах и что обычно не разрешается запускать приложение достаточно долго, чтобы представить проблему. Мы тестируем это сейчас.
[EDIT]. Следует также отметить, что мы экспериментируем с подробным описанием здесь. Он был установлен на одной машине на данный момент, и я буду обновлять соответствующим образом.
[EDIT - через 24 часа]. Таким образом, две машины теперь работают один и тот же код за одну ночь. На моей машине (которая никогда не демонстрировала проблему), после первоначального входа в приложение было очень неаккуратно, но спустя менее минуты вернулась к нормальной работе. (Я положил это на машину, явно снимая с HDD). На другой машине (которая обычно демонстрирует проблему), приложение улучшилось через несколько секунд, но все еще сейчас вяло по сравнению с моим.
[EDIT - через 48 часов] На тестовой машине тестовое приложение теперь полностью не отвечает (заблокировано) после работы в течение 48 часов. На одном и том же компьютере приложение WPF с легким "оболочкой" (содержащее элемент управления вкладкой, некоторые кнопки и несколько панелей и сеток) все еще работает и отлично реагирует. Итак, что-то в этих более сложных элементах управления вызывает эту проблему... которая действительно указывает на (потенциально) триггеры и делегаты, которые могут быть основной причиной. Я посмотрю, как профилировать приложение/элементы управления еще раз. Между тем, есть ли у кого-нибудь какие-либо советы о том, как обеспечить, чтобы приложение "очищалось" после себя через определенные промежутки времени? Потому что мы смотрим на сторонние элементы управления здесь, поэтому мои возможности для их редактирования ограничены!
Поблагодарили бы за любые советы, которые могут быть предоставлены!