Вопрос производительности WinForms - PullRequest
2 голосов
/ 16 декабря 2010

Мое приложение имеет несколько больших форм с большим количеством изображений, что значительно увеличивает размер встроенного исполняемого файла. Со временем кажется, что производительность при запуске замедляется и, похоже, не становится лучше.

Если бы я поместил все формы, кроме основной, в отдельную DLL, это ослабило бы некоторое давление, оказываемое на приложение при запуске?

Я бы проверил это сам, но у меня есть МНОГО форм, и я не хочу делать это, если кто-то не подтвердит, что такое действие окажется полезным.

Ответы [ 5 ]

1 голос
/ 16 декабря 2010

Еще один совет, который может быть полезен: это уменьшило время запуска моего приложения с 2 минут до <10 секунд на тонком клиенте низкого уровня. Используйте <a href="http://msdn.microsoft.com/en-us/library/6t9t5wcf%28v=vs.80%29.aspx" rel="nofollow"> NGEN для генерации предварительно скомпилированного собственного образа ваших сборок.

1 голос
/ 16 декабря 2010

Многие факторы могут повлиять на производительность запуска.Использовали ли вы какие-либо инструменты, чтобы доказать, что это изображения?

Для начала, пройдите следующие советы: http://devcomponents.com/blog/?p=361

И рассмотрите возможность использования многопоточности для загрузки более крупных объектов в фоновом режиме.

1 голос
/ 16 декабря 2010

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

0 голосов
/ 16 декабря 2010

Как говорили другие, профиль, не догадайтесь.

Подойдет не только любой профилировщик. Вот пользователь (кроме меня), который обнаружил случайную паузу самостоятельно.Вы говорите, что «интенсивные» методы находятся в библиотеках, для которых у вас нет исходного кода - это типично и нормально.Вам нужно знать, какие операторы в вашем коде запрашивают время, которое нужно потратить, и они не могут быть ограничены только временем ЦП.Большинство профилировщиков не говорят вам этого, но это делает случайная пауза.

Если вам интересно, вот недавнее обсуждение проблем.

0 голосов
/ 16 декабря 2010

Мне интересно, использовали ли вы MEF и Lazy load, тогда когда вам действительно нужно создать экземпляр модуля (Form), вызвав .Value.

Есть пара вещей, которые я делаю с приложениями, содержащими много форм:

  • Создание пользовательского интерфейса .exe: в основном только мои формы
  • Создать бэкэнд .dll: все, что работает за пользовательским интерфейсом.

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

Учитывая, что изображения предназначены для панелей инструментов, я бы не выделил их в качестве ресурсов. Я все еще буду твердо придерживаться своего совета разбить на несколько .dll.

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