У меня есть сложное приложение WPF, которое использует много ресурсов из общего ресурсного словаря ресурсов. Первое инициализированное окно занимает 8 секунд для инициализации. Проблема с производительностью меньше на дисках SSD, но для этого требуется 2 секунды.Проблема с производительностью при запуске приложения WPF
Я попытался использовать Visual Studio Profiler, и он показывает большие затраты времени на InitializeComponent(); окон, которые необходимо отобразить.
Я считаю, что это связано с используемым словарем ресурсов, но я не могу его заменить, потому что мне это действительно нужно, потому что все элементы Windows и WPF используют ссылки StaticResource.
Я попытался оптимизировать запуск так сильно, насколько это возможно. Я создал много фоновых потоков, но это не помогло слишком много. Всякий раз, когда нужно отобразить окно, он должен быть прикреплен к потоку пользовательского интерфейса под тем же Диспетчером. Это создает большую проблему с производительностью, и все пользовательские интерфейсы и любой индикатор выполнения на экране блокируются.
Итак, подведем итоги. Начиная с момента, когда ShowDialog вызывается до тех пор, пока окно не отобразится, оно занимает 8 секунд. Это видно только в первом окне. Любое другое окно, открытое после этого, будет отображаться быстро.
Теперь я спрашиваю сначала, что происходит в фоновом режиме и почему эта задержка настолько велика и вторая, что можно сделать, чтобы увеличить скорость запуска.
Я не упомянул, но во время запуска нет исключений или данных. Это значит, что не относится к Исключениям.
Я считаю, что это что-то с инициализацией кнопок и других компонентов, потому что почти у всех из них есть Restrled ControlTemplate.
К сожалению, это мне не помогает. Мне не разрешено использовать заставку. На первом экране отсутствует тяжелый код или данные, используемые при загрузке. Есть только 2 кнопки и один фон LinearGradientBrush. Даже профайлер не знает, как измерить, что происходит после InitializeComponent(); Это должно быть что-то связанное с XAML и ресурсами. Необходимо найти дополнительную информацию о том, как инициализируются словари ресурса. – Patrik
«Это должно быть что-то связанное с XAML и ресурсами». => Почему вы так думаете? –
Потому что я измерил время, затраченное на инициализацию. По сравнению с загрузкой другого кода это большая разница. Это составляет 87% времени для ресурсов и 4.7 для кода позади + оставшихся нескольких процентов для некоторых DLL ... – Patrik