Приложение WPF запускается слишком медленно - PullRequest
0 голосов
/ 12 сентября 2011

У меня проблемы с моим текущим приложением, которое разработано в C # с WPF. Приложение состоит из различных блок-схем, каждая из которых содержится в отдельном окне.

При запуске все классы потоковой диаграммы создаются и инициализируются в своем окне. Затем окна становятся невидимыми, и появляется меню потоковой диаграммы.

С каждой новой потоковой диаграммой запуск приложения замедляется. Инициализация окна, похоже, занимает много времени.

Как я могу подойти к этой проблеме?

Я думал об инициализации при первой необходимости или фоновой инициализации.

Примечание: Я забыл очень важный факт: меню потоковой диаграммы создается на основе других потоковых диаграмм, поскольку каждая отдельная потоковая диаграмма отображается в виде изображения для отображения кнопки меню миниатюр. Это проблема, которая в любом случае повлияла на производительность.

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

У вас есть много подходов к этой проблеме. Сначала вы должны удалить инициализацию из c'tor.

Куда его переместить? Либо для события Window_onLoad, таким образом, приложение сначала загрузится, а затем начнет инициализацию потоковых диаграмм (использование нового потока предотвратит зависание пользовательского интерфейса).

Или, как только пользователь выберет нужную блок-схему из меню, вы откроете окно и начнете инициализировать внутреннюю блок-схему, покажете приятную анимацию «загрузка ...», когда заняты, и покажете блок-схему, как только вы закончите.

Я бы предпочел второй подход, инициализировать каждый объект, когда это необходимо.

Edit: Поскольку вы должны визуализировать большие пальцы на основе потоковых диаграмм, я бы сделал следующее: Переместите init потоковых диаграмм в главное окно Loaded event и инициируйте каждую потоковую диаграмму в отдельном потоке, пока он занят, отображая приятную анимацию «Please wait ...». Таким образом, появляется главное окно приложения, пользователь видит, что приложение загружается, ваши пальцы будут создаваться одновременно, поэтому время загрузки будет сокращено. После того, как все большие пальцы созданы, скрыть анимацию.

0 голосов
/ 12 сентября 2011

Никто еще не упомянул профилирование, но почему бы не , просто попробуйте (последний абзац) этот ?

Вы легко увидите доминирующую причину того, как долго это происходит. Скорее всего, это что-то довольно тривиальное, что вы можете легко исправить.

Если вам нужно больше объяснений, посмотрите здесь .

0 голосов
/ 12 сентября 2011

Не создавайте экземпляры всех классов потоковой диаграммы до загрузки главного окна.

В качестве первого подхода я бы использовал инициализацию при необходимости.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...