Проблемы с производительностью, связанные с элементом управления WPF, размещенным в WinForms

У нас есть очень сложное программное обеспечение, в основном написанное с использованием .NET WinForms на C #. Многие люди внесли в это свой вклад. Одним из таких вкладов было добавление Windows Presentation Foundation (WPF) < / a> элемент управления, размещенный в Win Forms. Указанный элемент управления считается обычным и используется во многих местах приложения.

Все работало нормально до тех пор, пока несколько дней назад мы не начали замечать чрезмерную задержку запуска приложения. Раньше приложение запускалось менее чем за 5 минут, но теперь запускается за 20 минут.

Мы анализировали ситуацию, но нам было очень трудно определить реальную проблему. Мы видели, что наш некорректный общий элемент управления, который используется в нескольких местах, в конечном итоге вызывает следующие функции фреймворка:

введите описание изображения здесь

Время, затрачиваемое функциями системы на выполнение своих обязанностей, показано на рисунке выше. Каждый раз, когда инициализируется общий элемент управления, выполнение системных функций занимает около 1,5 минут. В нашем приложении мы используем общий элемент управления не менее 8 раз. Итак, всего 12 минут.

Кто-нибудь еще видел такие проблемы с элементами управления WPF, размещенными на WinForms? Любая помощь будет оценена.

РЕДАКТИРОВАТЬ:

Возникла проблема со словарем C #, который мы используем. Избавление от него с помощью List ‹> решает проблему задержки. Microsoft воспроизвела проблему в их конце. Они над этим работают. Может быть, наше приложение довело словарь C # до крайности;)

Спасибо всем за ваш вклад.


person msiyer    schedule 03.04.2014    source источник
comment
Можете ли вы опубликовать свой код для элемента управления WPF? XAML / код позади.   -  person BenjaminPaul    schedule 03.04.2014


Ответы (2)


Скорее всего, это будет инициализация элемента управления WPF, а не что-то связанное с ElementHost или тем фактом, что он размещен в WinForms.

Не видя кода для WPF UserControl, трудно сказать, что это может быть, но я бы сказал, что взаимодействие WPF / WinForms, безусловно, отвлекает.

person BenjaminPaul    schedule 03.04.2014
comment
У меня сейчас нет доступа к коду. Но я отправлю его как можно скорее. - person msiyer; 03.04.2014

Вы можете попробовать использовать Ngen:

The Native Image Generator (Ngen.exe)это инструмент, повышающий производительность управляемых приложений. Ngen.exe создает образы в машинном коде, которые представляют собой файлы, содержащие скомпилированный машинный код для конкретного процессора, и устанавливает их в кэш собственных образов на локальном компьютере. Среда выполнения может использовать образы в машинном коде из кэша вместо использования just-in-time (JIT) compiler для компиляции исходной сборки.

Если сборки проекта будут компилироваться с помощью Ngen, нет необходимости каждый раз запускать JIT-компилятор перед запуском приложения и загрузкой метаданных использования сборок.

Ngen найдет все статические зависимости основной сборки и скомпилирует их все в низкоуровневые образы. Эти изображения будут храниться в кэше сборок (GAC), тем самым можно сократить время загрузки приложения.

person Anatoliy Nikolaev    schedule 03.04.2014