Добавление XMLNS приводит к зависанию VS

В настоящее время в моем представлении редактора XAML я часто сталкиваюсь с эпизодами захвата примерно по 3 секунды каждый. Я смог сузить причину этого до пользовательских пространств имен.

По умолчанию на моей странице есть 2 объявления XMLNS по умолчанию:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Page>

Это работает нормально, без заеданий. Однако, как только я добавляю XMLNS для элементов управления в свое приложение, оно начинает заедать.

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
    xmlns:controls="clr-namespace:MyNamespace.Controls">
</Page>

Это не относится только к этому пространству имен. Я пробовал множество комбинаций пространств имен. В основном любая XMLNS, указывающая на одно из пространств имен MY, вызывает эту проблему. Я не совсем уверен, как диагностировать эту проблему. Любые указатели?

РЕШЕНИЕ

Мы узнали решение. У нас была ссылка на сборку Microsoft размером около 7 МБ (материал ACtiveX для веб-браузеров). При удалении все ускорилось. Сейчас мы ищем способы абстрагировать эту сборку, чтобы она могла существовать в папке среды выполнения, но не нуждалась в ссылке на нее из проекта. Спасибо всем за ваши идеи.


person DarkwingDuck    schedule 08.09.2009    source источник
comment
Я должен упомянуть, что это происходит и на машине другого разработчика. Мы оба запускаем XP с VS2008SP1. У меня XP SP3, а у него XP SP2, у обоих такая же проблема.   -  person DarkwingDuck    schedule 23.09.2009


Ответы (4)


Прежде всего, мы должны выяснить, что происходит, когда вы закрываете кавычки внутри Visual Studio. Это просто программа (хотя и хорошая) - отлаживай/профилируй.

  • У вас установлены дополнительные плагины? Выключите их.
  • Отключить Intellisense.
  • Что происходит с MS Expression Blend? Он захватывает?
  • Выключите все антивирусы.
  • Запустите Process Monitor и отслеживайте, что происходит с VS. Есть ли ошибки в разрешении имен файлов/ключей реестра?
  • Если ничего не помогло, используйте профилировщик в процессе Visual Studio.
  • Если ничего не помогло, напишите свой вопрос на StackOverflow. Ой. Подожди. Вы уже сделали это. Подождем еще ответов :)!

Ваше здоровье!

person Anvaka    schedule 28.09.2009
comment
Привет, Анвака, да, мы отключили плагины, в intellisense этого не происходит. Не знал об использовании proc mon, хороший пример для дальнейшего использования! Я решил это, опубликую наверху позже. +1 за хорошую серию вещей, которые можно попробовать. - person DarkwingDuck; 01.10.2009

Возможно, он что-то ищет или перекомпилирует код.

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

В некоторых проектах мы получаем такое поведение, если выходим из режима отладки, нажимая кнопку остановки отладки вместо выхода из программы.

Кроме того, было зарегистрировано несколько ошибок, связанных с зависанием Visual Studio при использовании элементов управления DataGrid с WPF, это может быть связано с этим. Вот пара:

http://wpf.codeplex.com/WorkItem/View.aspx?WorkItemId=10542 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=420621

person Shiraz Bhaiji    schedule 24.09.2009
comment
Привет, Шираз, это не связано ни с одной из этих вещей, и вывод не показывает ничего связанного. - person DarkwingDuck; 01.10.2009

Вы используете сканер вирусов в режиме реального времени? Это часто может привести к снижению производительности, когда VS необходимо скомпилировать ваш код...

person Rob Fonseca-Ensor    schedule 28.09.2009
comment
Привет, Роб, да, но, пожалуйста, объясните, почему это вызывает проблему только при вставке пространств имен в локальные элементы управления. - person DarkwingDuck; 01.10.2009

Вероятным предположением является то, что это поведение связано с попыткой редактора VS XAML предоставить Intellisense для узлов, объявленных с clr-namespace. В конце концов, это одно из различий между clr-namespaces и другими типами пространств имен (при этом URI просто воспринимается как уникальная строка, но не предпринимается никаких попыток утвердить определение базового языка XML).

Возможный обходной путь — слишком определить префикс xmlns под фиктивным URI на этапе редактирования xaml (и, следовательно, отказаться от любых подсказок от intellisense) и вернуться к правильному пространству имен clr для других этапов проекта.

Кроме того, возможно, добавление Assembly=xxxx в объявление пространства имен может помочь в ситуации. Даже если речь идет о сборке текущего приложения, это может избавить редактор и связанный с ним IntelliSense некоторые колебания.

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

person mjv    schedule 30.09.2009
comment
+1, потому что это на правильном пути. В конце концов мы решили это, я опубликую подробности вверху. - person DarkwingDuck; 01.10.2009