Поделиться через


Повышение шансов решения проблемы с производительностью

Пользователи Visual Studio широко используют средство Сообщить о проблеме для отправки отчетов о возникающих проблемах. Команда разработчиков Visual Studio анализирует отзывы пользователей, выявляет наблюдаемые в них тенденции к возникновению сбоев или снижению производительности и устраняет проблемы, которые могут затрагивать многих пользователей. Чем больше полезной информации содержит отзыв в запросе, тем выше вероятность, что команде разработчиков удастся быстро выявить и решить проблему. В этом документе приводятся рекомендации по включению полезной информации в сообщения о сбоях или проблемах с производительностью.

Общие рекомендации

Visual Studio — это обширная и сложная платформа, которая поддерживает множество языков, типов проектов, платформ и т. д. Эффективность работы этой среды зависит от установленных и активных в рамках сеанса компонентов, установленных расширений, параметров 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"

Задайте количество дампов и папку для их размещения. Дополнительные сведения об этих параметрах см. в этом разделе.

Примечание.

Дампы, записанные с помощью диспетчера задач, скорее всего будут иметь несоответствующую разрядность, что значительно снижает их практическую ценность. Мы рекомендуем использовать описываемую выше процедуру для записи дампа кучи. Если вы хотите использовать диспетчер задач, закройте запущенный в данный момент объект, запустите диспетчер задач 32bit (%windir%\syswow64\taskmgr.exe) и соберите оттуда дамп кучи.

Примечание.

Каждый создаваемый таким образом файл дампа будет иметь размер около 4 ГБ. Убедитесь, что на диске, где будет располагаться папка дампа (DumpFolder), достаточно свободного места. При необходимости скорректируйте количество создаваемых файлов дампа (DumpCount).

При каждом сбое Visual Studio в указанном месте будет создаваться файл дампа devenv.exe.[номер].dmp.

После этого воспользуйтесь функцией "Сообщить о проблеме..." в Visual Studio. При этом вы можете приложить к отчету соответствующий дамп.

  1. Найдите файл дампа, соответствующий указанному в отчете сбою (для этого проверьте время создания файла).

  2. По возможности запакуйте файл (*.zip), чтобы уменьшить его размер перед отправкой отзывов.

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

Примечание.

Наиболее ценный отзыв: В этом случае наиболее ценным отзывом является свалка кучи, захваченная во время аварии.

Отсутствие отклика

Среда Visual Studio в течение длительного времени не демонстрирует отклика.

Легко воспроизводимое отсутствие отклика

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

Отсутствие отклика по неизвестным причинам

Если отсутствие отклика проявляется без какой-либо закономерности, при следующем таком случае запустите новый экземпляр Visual Studio и сообщите о проблеме с его помощью. На экране "Запись" выберите сеанс Visual Studio, который не отвечает. (Дополнительные сведения о том, как записывать действия для воспроизведения проблемы, см. в шаге 8 на странице Как сообщить о проблеме.)

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

Примечание.

Наиболее ценный отзыв: В этом случае наиболее ценным отзывом является свалка кучи, захваченная во время безответственности.

Проблемы, связанные с медленной работой и высокой загрузкой ЦП

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

Примечание.

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

Для большей эффективности при записи трассировки производительности выполните следующие действия:

  1. При необходимости запустите экземпляр Visual Studio, в котором можно будет воспроизвести проблему.

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

    • Если проблема, о которой вы сообщаете, не связана с загрузкой решения, после его открытия подождите 5–10 минут (или больше, в зависимости от размера решения), прежде чем записывать трассировку производительности. Во время загрузки решения обрабатывается большой объем данных, в связи с чем дополнительная нагрузка на систему может помешать локализации проблемы, о которой вы сообщаете.

  2. Запустите вторую копию Visual Studio, не открывая в ней решение.

  3. В новой копии Visual Studio, откройте средство Сообщить о проблеме.

  4. Выполните действия, описываемые в разделе Как сообщить о проблеме, вплоть до шага "Предоставьте дамп трассировки и кучи (необязательно)".

  5. Выберите запись первой копии Visual Studio (в которой возникла проблема с производительностью) и начните запись.

    • Откроется приложение средства записи действий и начнется запись.

    • Во время записи выполните действие, в связи с которым возникла проблема, в первой копии Visual Studio. Проблема с производительностью должна проявиться в течение времени записи, иначе нам будет сложно исправить ее.

    • Если действие занимает менее 30 секунд и может быть легко воспроизведено, повторите его, чтобы более детально продемонстрировать проблему.

    • В большинстве случаев для демонстрации проблемы достаточно трассировки продолжительностью 60 секунд, особенно если связанное с проблемой действие длилось или повторялось более 30 секунд. При необходимости продолжительность записи можно изменить, чтобы зафиксировать все необходимые действия.

  6. Как только операция, вызвавшая замедление работы или высокую загрузку ЦП, завершится, остановите запись в средстве записи действий. Обработка полученной трассировки производительности может занимать несколько минут.

  7. После ее обработки к вашему отзыву будет добавлено несколько вложений. При необходимости приложите дополнительные файлы, которые могут помочь воспроизвести проблему (образец проекта, снимки экрана, видеозаписи и т. д.).

  8. Отправьте отзыв.

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

Не прикрепляйте данные трассировки производительности напрямую к элементу отзыва на веб-сайте сообщества разработчиков. Встроенное средство "Сообщить о проблеме" в Visual Studio поддерживает рабочий процесс запроса и предоставления дополнительной информации. Если для решения ранее направленного элемента отзыва нам понадобится трассировка производительности, мы присвоим такому элементу состояние "Требуется дополнительная информация", на которое можно будет ответить так же, как и при отправке отчета о новой проблеме. Дополнительные сведения см. в описании состояния "Требуется дополнительная информация" в документации по средству "Сообщить о проблеме".

Примечание.

Наиболее ценный отзыв: почти для всех проблем с медленностью или высокой загрузкой ЦП наиболее ценным отзывом является высокоуровневое описание того, что вы пытались сделать, а также трассировки производительности (*.etl.zip), которая фиксирует поведение в течение этого времени.

Расширенные трассировки производительности

В большинстве случаев возможностей сбора трассировки в средстве "Сообщить о проблеме" достаточно. Тем не менее, иногда требуется больший контроль над этим процессом (например, для трассировок с большим размером буфера). В таких ситуациях рекомендуется использовать средство PerfView. Инструкции по записи трассировки производительности вручную с помощью средства PerfView см. на этой странице.

Проблемы вне процесса

Примечание.

Начиная с Visual Studio 2019 версии 16.3, внепроцессные журналы автоматически присоединяются к отзывам, отправленным с помощью инструмента "Сообщение о проблеме". Однако, если проблема воспроизводится напрямую, с помощью следующих шагов вы все же сможете добавить дополнительные сведения, которые помогут лучше диагностировать проблему.

Существует несколько вспомогательных процессов, которые работают параллельно с Visual Studio и предоставляют различные функции помимо основного процесса Visual Studio. Если ошибка возникает в одном из этих вспомогательных процессов, она обычно отображается на стороне Visual Studio как StreamJsonRpc.RemoteInvocationException или StreamJsonRpc.ConnectionLostException.

Эти типы проблем решить проще всего из-за предоставления дополнительных журналов, которые можно собирать, выполнив следующие действия:

  1. Если это проблема, воспроизводимая напрямую, сначала удалите папку %temp%/servicehub/logs. Если вы не можете воспроизвести эту проблему, сохраните эту папку без изменений и пропустите следующие пункты:

    • Установите для глобальной переменной среды ServiceHubTraceLevel значение Все.
    • Воспроизведите проблему.
  2. Скачайте средство сбора журналов для Microsoft Visual Studio и платформы .NET Framework здесь.

  3. Запустите средство. При этом происходит вывод ZIP-файла в %temp%/vslogs.zip. Присоедините этот файл к отзыву.