Повышение шансов на исправление проблемы с производительностью
Средство "сообщить о проблеме" широко используется пользователями Visual Studio для сообщения о ряде проблем. Команда Visual Studio находит сбои и проблемы замедления в обратной связи пользователей и устраняет проблемы, влияющие на широкий круг пользователей. Чем эффективнее конкретный запрос обратной связи, тем более вероятно, что она будет диагностирована и решена быстро командой по продукту. В этом документе описаны рекомендации при составлении отчетов о сбоях или замедлении работы, чтобы сделать их более действенными.
Общие рекомендации
Visual Studio — это большая сложная платформа, которая поддерживает множество языков, типов проектов, платформ и многое другое. То, как он работает, зависит от компонентов, установленных и активированных в сеансе, установленных расширений, настроек Visual Studio, конфигурации компьютера и, наконец, структуры редактируемого кода. Учитывая количество переменных, трудно определить, имеет ли отчет о проблеме один и тот же базовый вопрос, что и отчет о проблеме другого пользователя, несмотря на то, что видимый симптом совпадает. Учитывая, что ниже приведены некоторые рекомендации по обеспечению более высокой вероятности диагностики конкретного отчета о проблеме.
Предоставить как можно более конкретное название
Найдите характерные признаки сообщаемой проблемы и включите их в заголовок, насколько это возможно. Если название описательное, то менее вероятно, что пользователи с несвязанными проблемами (но с тем же поверхностным симптомом) будут голосовать или комментировать ваш билет, что затрудняет диагностику вашей проблемы.
В случае сомнений зарегистрируйте новый отчет о проблеме
Многие проблемы могут не иметь характерных признаков или шагов для повторения. В таких случаях новый отчет лучше положительной оценки или комментария к другому отчету, в котором сообщается о подобном заметном симптоме . В зависимости от типа отчета включите дополнительные диагностические файлы в отчет, как описано далее в этом документе.
Лучшие практики для конкретных проблем
Ниже описаны проблемы, которые трудно диагностировать без хороших диагностических файлов. После определения случая, который лучше всего описывает вашу проблему, выполните действия обратной связи, относящиеся к этому делу.
Сбой: Ошибка происходит, когда процесс (Visual Studio) неожиданно завершает свою работу.
Неотзывчивость: VS становится неотвечающей в течение длительного периода времени.
проблемы с медлительностью: любое определённое действие в VS медленнее, чем нужно
высокий ЦП: длительные периоды неожиданно высокого использования ЦП
проблемы сOf-Process: Проблема, вызванная вспомогательным процессом Visual Studio
Сбои
Сбой возникает при неожиданном завершении процесса (Visual Studio).
легко воспроизводимые сбои
Прямые воспроизводимые сбои — это случаи, имеющие все нижеперечисленные характеристики:
Это можно наблюдать, следуя известному набору шагов.
Можно наблюдать на нескольких компьютерах (при наличии)
Может быть воспроизведен в образце кода или в проекте, который можно прикрепить или предоставить в качестве обратной связи (если шаги включают открытие проекта или документа).
Для этих проблем выполните действия, описанные в разделе "Как сообщить о проблеме" и обязательно включите:
Действия по воспроизведению проблемы
Автономный проект повторной подготовки, как описано выше. Если автономная повторная проверка невозможна, включите:
Язык открытых проектов (C#, C++и т. д.)
Тип проекта (консольное приложение, ASP.NET и т. д.)
Заметка
Наиболее ценные отзывы: В этом случае наиболее ценным отзывом является набор шагов для воспроизведения проблемы вместе с примером исходного кода.
Неизвестные сбои
Если вы не уверены, что вызывает сбои или они кажутся случайными, вы можете записывать дампы локально при каждом сбое Visual Studio и присоединять их к отдельным элементам обратной связи. Чтобы сохранить дампы локально при сбое Visual Studio, выполните следующие команды в командном окне администратора:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\devenv.exe" /v DumpType /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\devenv.exe" /v DumpCount /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\devenv.exe" /v DumpFolder /t REG_SZ /d "C:\CrashDumps"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService32.exe" /v DumpType /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService32.exe" /v DumpCount /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService32.exe" /v DumpFolder /t REG_SZ /d "C:\CrashDumps"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService.exe" /v DumpType /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService.exe" /v DumpCount /t REG_DWORD /d 2
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ServiceHub.RoslynCodeAnalysisService.exe" /v DumpFolder /t REG_SZ /d "C:\CrashDumps"
Настройте количество дампов и папку дампа соответствующим образом. Дополнительные сведения об этих параметрах здесь.
Заметка
Дампы, снятые с помощью диспетчера задач, скорее всего, будут иметь неправильную разрядность, что делает их менее полезными. Описанная выше процедура является предпочтительным способом захвата дампа кучи. Если вы хотите использовать диспетчер задач, закройте запущенный в данный момент объект, запустите 32-разрядный диспетчер задач (%windir%\syswow64\taskmgr.exe) и соберите оттуда дамп кучи.
Заметка
Каждый файл дампа, созданный этим методом, будет размером до 4 ГБ. Убедитесь, что DumpFolder установлен в папку с достаточным свободным местом на диске или соответствующим образом измените уровень DumpCount.
Каждый раз, когда Visual Studio аварийно завершает работу, будет создан дамп файл devenv.exe.[число].dmp в настроенном расположении.
Затем используйте функцию Visual Studio "Сообщить о проблеме...". Это позволит прикрепить соответствующий дамп.
Найдите файл дампа для отчета о сбое (найдите файл с правильным временем создания)
По возможности запакуйте файл (*.zip), чтобы уменьшить его размер перед отправкой отзывов.
Выполните действия, описанные в разделе "Как сообщить о проблеме", и прикрепите кучи дампа к новому элементу обратной связи.
Заметка
Наиболее ценная информация: Для этого случая наиболее ценная информация — это дамп памяти, захваченный во время аварии.
Нереагирование
VS не реагирует в течение длительного периода времени.
непосредственно воспроизводимая неотзывчивость
Как описано в соответствующем разделе о сбоях, для проблем, которые можно легко воспроизвести, увидеть на нескольких компьютерах и можно продемонстрировать в небольшом примере, наиболее ценные отчеты отзывов — это те, которые включают шаги для воспроизведения проблемы, а также пример исходного кода, демонстрирующего проблему.
Неизвестная неотзывчивость
Если неотзывчивость проявляется непредсказуемым образом, при следующем проявлении запустите новый экземпляр Visual Studio и отправьте сообщение о проблеме из этого экземпляра. На экране "Запись" обязательно выберите сеанс Visual Studio, который не отвечает. (Дополнительные сведения о том, как записать действия, которые можно выполнить для воспроизведения проблемы, см. на шаге 8 на странице как сообщить о проблеме.)
Если экземпляр Visual Studio, который не отвечает, был запущен в режиме администратора, второй экземпляр также должен быть запущен в режиме администратора.
Заметка
Наиболее ценные отзывы: В этом случае наиболее ценным отзывом является дамп кучи, захваченный во время неотзывчивости.
Проблемы с замедлением и высокой производительностью ЦП
Что делает проблему медленного или высокого использования ЦП наиболее полезной для анализа, так это трассировка производительности, записанная во время медленной операции или события высокой загрузки ЦП.
Заметка
По возможности изолируйте каждый сценарий в отдельном отчете о обратной связи. Например, если ввод и навигация являются медленными, выполните приведенные ниже действия по каждой проблеме. Это помогает команде разработчиков изолировать причину конкретных проблем.
Для получения наилучших результатов при оценке производительности выполните следующие действия.
Если это еще не запущено, откройте копию Visual Studio, в которой будет воспроизведена проблема.
Все готово, чтобы воспроизвести проблему. Например, если необходимо загрузить определенный проект с определенным файлом, убедитесь, что оба этих шага завершены, прежде чем продолжить.
Если вы не сообщаете о проблеме, относящейся к загрузке решения, попробуйте подождать 5–10 минут (или дольше, в зависимости от размера решения) после открытия решения до записи трассировки производительности. Процесс загрузки решения создает большое количество данных, поэтому ожидание нескольких минут помогает нам сосредоточиться на конкретной проблеме, которую вы сообщаете.
Запустите второй экземпляр Visual Studio без открытого решения
В новой копии Visual Studio откройте инструмент Сообщить о Проблеме
Выполните действия, описанные в разделе "Как сообщить о проблеме", пока не дойдете до шага "Предоставление трассировки и дампа кучи (необязательно)".
Выберите первую копию Visual Studio (ту, которая испытывает проблему с производительностью) и начните запись.
Приложение "Средство записи шагов" появится и начнет запись.
Во время записи выполнить проблематичное действие в первой копии Visual Studio. Нам трудно исправить конкретные проблемы с производительностью, если они не отображаются в течение записанного времени.
Если действие меньше 30 секунд и может быть легко повторено, повторите действие, чтобы дополнительно продемонстрировать проблему.
В большинстве случаев трассировки длительностью 60 секунд достаточно, чтобы выявить проблемы, особенно если проблематичное действие длилось (или повторялось) более 30 секунд. Длительность можно настроить по мере необходимости для отслеживания поведения, который требуется исправить.
Нажмите кнопку "Остановить запись" в программе записи шагов, как только завершится медленная операция или событие высокой загрузки ЦП, о котором вы хотите сообщить. Для обработки трассировки производительности может потребоваться несколько минут.
После завершения вы получите несколько вложений к вашему отзыву. Вложите дополнительные файлы, которые могут помочь воспроизвести проблему (пример проекта, снимки экрана, видео и т. д.).
Отправьте отзыв.
При записи трассировки производительности, если завершается медленная операция или высокая загрузка ЦП, немедленно остановите запись. Если собирается слишком много информации, самая старая информация перезаписывается. Если трассировка не остановлена в ближайшее время (через несколько секунд) после интересной операции, полезные данные трассировки будут перезаписаны.
Не присоединяйте трассировки производительности непосредственно к существующим элементам обратной связи на веб-сайте сообщества разработчиков. Запрос или предоставление дополнительных сведений — это поддерживаемый рабочий процесс в встроенном средстве отчета о проблеме в Visual Studio. Если для устранения предыдущего элемента обратной связи требуется трассировка производительности, мы установим состояние элемента обратной связи как "Требуется дополнительная информация", к которому можно реагировать таким же образом, как и на сообщение о новой проблеме. Подробные инструкции см. в разделе "Нужна дополнительная информация" в документе средства "Сообщить о проблеме".
Заметка
Наиболее ценные отзывы: Для почти всех проблем с медленностью или высоким ЦП наиболее ценным отзывом является высокоуровневое описание того, что вы пытались сделать, а также трассировку производительности (*.etl.zip), которая фиксирует поведение в течение этого времени.
Улучшенные трассировки производительности
Возможности сбора трассировки в средстве "Сообщить о проблеме" достаточны для большинства сценариев. Но существует время, когда требуется больше контроля над коллекцией трассировок (например, трассировка с большим размером буфера), в этом случае PerfView является отличным инструментом для использования. Инструкции по ручной записи трассировки производительности с помощью средства PerfView можно найти на странице Запись трассировок производительности с помощью PerfView.
Проблемы сOf-Process
Заметка
Начиная с Visual Studio 2019 версии 16.3, внепроцессные журналы автоматически присоединяются к отзыву, отправленному с помощью инструмента "Сообщить о проблеме". Однако если проблема является непосредственно воспроизводимой, приведенные ниже шаги по-прежнему могут помочь добавить дополнительные сведения для улучшения диагностики проблемы.
Существует ряд вспомогательных процессов, которые выполняются параллельно с Visual Studio и предоставляют различные функции за пределами основного процесса Visual Studio. Если ошибка возникает в одном из этих вспомогательных процессов, это обычно отображается на стороне Visual Studio как StreamJsonRpc.RemoteInvocationException или StreamJsonRpc.ConnectionLostException.
Что делает эти типы проблем наиболее поддающимися решению, состоит в предоставлении дополнительных логов, которые можно собирать, выполнив следующие действия.
Если это проблема, которую можно воспроизвести напрямую, сначала удалите папку %temp%/servicehub/logs. Если вы не можете воспроизвести данную проблему, сохраните эту папку без изменений и игнорируйте следующие пункты.
- Установите значение глобальной переменной среды ServiceHubTraceLevel на All.
- Воспроизвести проблему.
Скачайте средство сбора журналов Microsoft Visual Studio и .NET Framework здесь.
Запустите средство. Это выводит zip-файл в %temp%/vslogs.zip. Вложите этот файл к вашему отзыву.