Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
PVS-Studio C#: что делать, если подгото…

PVS-Studio C#: что делать, если подготовка проектов идёт слишком долго или зависает?

07 Сен 2021

Некоторые пользователи C# анализатора PVS-Studio сталкивались с тем, что этап подготовки проектов либо работает очень долго, либо вообще зависает. В этой заметке мы рассмотрим, как могла проявляться проблема и как мы её починили.

В чём заключалась проблема?

Проблема могла проявляться по-разному в зависимости от того, где используется C# анализатор (Visual Studio, Rider, command line). Типичный признак, как я упоминал выше, – этап подготовки проектов идёт либо очень долго, либо вообще не завершается.

Visual Studio

О зависании свидетельствует следующее окно, в котором прогресс либо не движется, либо движется очень медленно:

0864_CsEvaluationOptimizations_ru/image1.png

Rider

В окне "Background Tasks" выполняется шаг "PVS-Studio: Preparing for analysis", но прогресса нет:

0864_CsEvaluationOptimizations_ru/image2.png

Command-line (PVS-Studio_Cmd.exe / pvs-studio-dotnet)

При запуске консольной версии (PVS-Studio_Cmd.exe для Windows или pvs-studio-dotnet для Linux или macOS) после запуска анализатора нет никакого прогресса (даже при использовании флага '‑‑progress'):

0864_CsEvaluationOptimizations_ru/image3.png

Причина

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

Допустим, у нас есть 3 проекта: 'A', 'B', 'C'. 'A' зависит от 'B' и 'C', 'B' зависит от 'C', 'C' ни от чего не зависит. В итоге получалась такая логика. При анализе 'C' мы будем обрабатывать 1 проект (сам 'C'), в случае с 'B' - 2 проекта ('B' и 'C'), в случае с 'A' - 4 проекта (сам 'А', 'B' и 'C' как прямые зависимости, 'C' как транзитивную зависимость по проекту 'B'). Понимаете, да, какая последовательность вырисовывается? 1, 2, 4, 8, 16, 32, 64...

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

Решение оказалось максимально простым - не обрабатываем повторно одни и те же проекты.

Эта простая правка решила проблемы сразу нескольких пользователей:

  • некоторые писали, что у них в принципе стал проходить этот этап, хотя раньше анализатор попросту зависал на нём;
  • у кого-то этап подготовки проектов стал работать намного быстрее. Например, 4 минуты вместо 2 часов.

Что делать?

При использовании PVS-Studio версии 7.14 или более старой

В таком случае вам нужно просто обновиться до более свежей версии анализатора:

  • попробуйте PVS-Studio 7.15 или более новую версию, если она доступна на момент чтения этой заметки. Посмотреть последнюю доступную версию, а также загрузить нужный дистрибутив, можно на соответствующей странице.
  • если релиз 7.15 ещё не состоялся, напишите нам. Мы выдадим бета-версию анализатора, где проблема решена.

При использовании PVS-Studio версии 7.15 или более новой

В таком случае вы столкнулись с другой проблемой, о которой мы ещё не знаем. Пожалуйста, напишите нам в поддержку - будем разбираться.

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам