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

С небольшими проектами я могу почти мгновенно переключиться в режим дизайна (‹ 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 секунд для отображения представления дизайна, поэтому все, что влияет на панели инструментов, также влияет и на другие элементы управления. Я буду продолжать пытаться точно определить, какие элементы управления и, возможно, даже то, что вызывает это!


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


Ответы (4)


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

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

person David Wengier    schedule 07.05.2009
comment
Спасибо за предложение, но это все равно происходит, даже если для AutoToolboxPopulate установлено значение false :( - person Tim Gradwell; 07.05.2009
comment
Даже после перезагрузки и очистки и т.д.? Это раздражает. У нас была точно такая же ситуация, и эта настройка все исправила. Удачи! - person David Wengier; 07.05.2009
comment
Черт, я год боролся с этим, думая, что это моя библиотека элементов управления. Сделал это, и теперь дизайнер стал гладким, как масло! Спасибо @DavidWengier - person stigzler; 08.10.2020
comment
Но если вы установите для Auto значение false, как добавить элемент управления вручную? - person Alan Baljeu; 21.01.2021

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

person Community    schedule 21.05.2009

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

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

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

person Jim    schedule 07.05.2009
comment
Это происходит на совершенно новой машине (как при новой установке Windows). На старых компьютерах открытие представления дизайна занимает несколько минут. - person Tim Gradwell; 07.05.2009

У меня была эта проблема в проекте 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 вызывают эту проблему, добавьте комментарий.

person pwrgreg007    schedule 13.05.2014