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

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

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

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

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

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

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


Если вы так и не получили ответ, пожалуйста, проверьте папку
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 или более новой

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

Популярные статьи по теме
Разбор ошибок в игровом движке Stride

Дата: 30 Сен 2022

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

Stride – это мощный, бесплатный и активно развивающийся игровой движок, реализованный на C#. Он вполне может стать альтернативой Unity, но насколько качественный исходный код Stride? Узнаем это с пом…
Сортировки в C#: OrderBy.OrderBy или OrderBy.ThenBy? Разбираемся, что эффективнее и почему

Дата: 20 Сен 2022

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

Предположим, есть задача: нужно отсортировать коллекцию по нескольким ключам. В C# это можно сделать с помощью вызовов OrderBy().OrderBy() или OrderBy().ThenBy(). Но в чём разница между этими вызовам…
ML.NET: можно ли доверять машинному обучению Microsoft?

Дата: 08 Сен 2022

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

В 2018 году Microsoft разработали ML.NET – фреймворк машинного обучения для .NET разработчиков. За прошедшее время эта библиотека претерпела существенные изменения и обзавелась новыми функциями для в…
Чем опасны уязвимые зависимости в проекте и как с этим помогает SCA?

Дата: 06 Сен 2022

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

Современные приложения почти всегда используют сторонние библиотеки. Если библиотека содержит уязвимость, то уязвимым может оказаться и использующее её приложение. Но как определить наличие таких про…
Соберёмся? Вторая проверка проекта MSBuild

Дата: 01 Сен 2022

Автор: Никита Паневин

MSBuild – популярная сборочная платформа с открытым исходным кодом от Microsoft, которую используют разработчики по всему миру. В далёком 2016 году мы уже проверяли проект при помощи PVS-Studio и наш…

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

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