to the top
close form
Для получения триального ключа
заполните форму ниже
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

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

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

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

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

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

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


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
>
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 или более новой

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

Популярные статьи по теме
Под капотом SAST: как инструменты анализа кода ищут дефекты безопасности

Дата: 26 Янв 2023

Автор: Сергей Васильев

Сегодня речь о том, как SAST-решения ищут дефекты безопасности. Расскажу, как разные подходы к поиску потенциальных уязвимостей дополняют друг друга, зачем нужен каждый из них и как теория ложится на…
Wave Function Collapse для процедурной генерации в Unity

Дата: 24 Янв 2023

Автор: Андрей Москалёв

Wave Function Collapse – это алгоритм, c помощью которого можно реализовать генерацию чего угодно, что можно было бы описать с помощью правил или конкретным примером. В этой статье мы рассмотрим, как…
PVS-Studio научился анализировать Blazor компоненты

Дата: 10 Янв 2023

Автор: Алексей Авдеев

Всем привет. Перед вами небольшая статья о добавлении анализа Blazor компонентов в PVS-Studio. По ходу рассказа постараемся предугадать ваши немые вопросы по теме и ответить на них. Приятного прочтен…
Создание .NET библиотеки от А до Я

Дата: 05 Янв 2023

Автор: Гость

Думаете о создании .NET библиотеки, но не знаете, в какую сторону двигаться? Уже разрабатываете нечто подобное, но хочется открыть для себя что-то новое? Ищете варианты расширить автоматизацию? Не зн…
Топ-10 ошибок, найденных в C#-проектах за 2022 год

Дата: 28 Дек 2022

Автор: Никита Липилин

За 2022 год разработчики PVS-Studio написали много статей, в которых рассказали об ошибках, найденных в различных Open Source проектах. Пришло время подвести итоги и представить десяток самых интерес…

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

Следующие комментарии next comments
close comment form
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо