Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Что может быть причиной такого медленного просмотра дизайна?

Автор вопроса: Tim GradwellОтветов: 4

С небольшими проектами я могу почти мгновенно переключиться в режим дизайна (‹ 1 секунды).

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

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

Большой проект ссылается на большой управляемый проект C++, но если я добавлю ту же ссылку (и вызову функцию из ссылки, чтобы убедиться, что она загружена) в небольшой проект, маленький проект все равно будет работать быстро.

В моем большом проекте используется SandDock. Если мой небольшой проект использует SandDock, он все равно будет быстрым.

В моем большом проекте около 60 пользовательских элементов управления, которые отображаются на панели инструментов. Если я добавлю 60 пользовательских элементов управления в небольшой проект, он все равно будет быстрым.

Если я скрою пользовательские элементы управления из панели инструментов с помощью [System.ComponentModel.ToolboxItem(false)], большой проект все равно будет медленным.

Проблема возникает как в vs2005, так и в vs2008.

Что может быть причиной того, что большой проект так медленно открывается в режиме конструктора в первый раз? Какая-то другая ссылка? Большое количество элементов управления? Большое количество классов? Какая-то другая причина?

Одна вещь, которую я заметил (хотя, возможно, отвлекающий маневр), заключается в том, что папка ProjectAssemblies (C:\Documents and Settings\tim.gradwell\Local Settings\Application Data\Microsoft\VisualStudio\9.0\ProjectAssemblies) огромна (> 1 ГБ) и в большинстве папок здесь есть копия моей DLL-библиотеки Managed C++! Эти папки создаются заново каждый раз при повторном открытии представления дизайна (после повторной компиляции). Может ли это быть связано с замедлением?


Дополнительная информация:

Панель инструментов в пользовательском элементе управления или форме заставляет форму загружаться 60 секунд. Удаление панели инструментов (но сохранение нескольких других элементов управления в форме) делает переключение в режим конструктора мгновенным.

Однако это еще не все... Панель инструментов в совершенно новом проекте не вызывает серьезного замедления, поэтому в моем большом проекте должно быть что-то, что влияет на панели инструментов. Кроме того, некоторым другим формам/элементам управления, на которых нет полос инструментов, по-прежнему требуется 60 секунд для отображения представления дизайна, поэтому все, что влияет на панели инструментов, также влияет и на другие элементы управления. Я буду продолжать пытаться точно определить, какие элементы управления и, возможно, даже то, что вызывает это!

  • Просто для ясности - большой проект, который вызывает замедление, написан на C #, верно? overslacked 21.05.2009
  • Проект написан на С#... он также ссылается на управляемый проект С++, но у меня не было времени попытаться изолировать управляемый проект С++, чтобы увидеть, имеет ли это значение... Tim Gradwell 22.05.2009

visual-studiowinforms

Ответы

Ответ 1 · рейтинг 12 · David Wengier

Несмотря на то, что вы пометили классы так, чтобы они не отображались на панели инструментов, Visual Studio по-прежнему необходимо сканировать все ваши открытые проекты, чтобы обнаружить это. Чтобы ускорить процесс, вам нужно отключить настройку автоматического заполнения панели инструментов. Это может немного раздражать, если вы много работаете с набором инструментов, но это значительно ускорит работу.

Параметр находится в меню Инструменты -> Параметры -> Конструктор Windows Forms, установите для параметра AutoToolboxPopulate значение false.

Ответ 2 · рейтинг 5 · Community

Первый ответ: "Настройка находится в меню "Инструменты" -> "Параметры" -> "Конструктор Windows Forms", установите для "AutoToolboxPopulate" значение false". Дизайнер имел обыкновение зависать как минимум на минуту при попытке сфокусироваться на элементе управления в форме при первом просмотре формы в режиме конструктора. Теперь это занимает всего несколько секунд. (у меня не хватило очков репутации, чтобы напрямую прокомментировать этот ответ)

Ответ 3 · Jim

То же самое происходит с моим 2005, в дополнение к тому, что devenv.exe зависает случайным образом.

и даже после "сборки" иногда пользовательские элементы управления имеют тенденцию повреждать основную форму.

Вы недавно сканировали на вирусы и дефрагментировали?

Ответ 4 · pwrgreg007

У меня была эта проблема в проекте Win CE 6.0 в Visual Studio 2005. В проекте используется System.Data.SQLite.dll v1.0.65.0. Каждый раз, когда я открывал или перекомпилировал проект, а потом пытался открыть форму с сеткой для дизайна, была задержка минимум 12 минут. Оказывается, он создавал 770 с лишним папок в разделе "Мои документы\Локальные настройки\Данные приложений\Microsoft\Visual Studio\8.0\Project Assemblies", в большинстве из которых была копия только SQLite dll.
Возникла проблема. в том, что я сослался на эту DLL в проекте из папки "родного брата" в свой проект. В качестве примера:
Папка проекта: "...Projects\ThisAndThat\projectFolder"
Папка DLL: "...Projects\ThisAndThat\projectFolderBin"
Могут быть и другие отношения папок, которые проявляются эту проблему, но я не исследовал.
Я переместил DLL в папку "Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE", и проблема исчезла. У меня есть форма с элементом управления вкладками, содержащим две вкладки. Каждая вкладка содержит элемент управления сеткой данных. Эта форма теперь почти мгновенно загружается в дизайнере.
Если кто-нибудь знает о лучшем решении или о том, какие настройки или поведение VS2005 вызывают эту проблему, добавьте комментарий.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы