metrica
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
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
Ваше сообщение отправлено.

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


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

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

Популярные статьи по теме
Уязвимость XSS в приложении ASP.NET: разбираем CVE-2023-24322 в CMS mojoPortal

Дата: 31 Май 2023

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

В этой статье изучим с разных сторон уязвимость XSS в CMS, написанной на C#. Вспомним теорию, разберёмся, как дефект безопасности выглядит со стороны пользователя и кода, а также поупражняемся в сост…
RavenDB и PVS-Studio: коллаборация, от которой выигрывают все

Дата: 24 Май 2023

Автор: Артём Ровенский

Небольшая история про сотрудничество PVS-Studio и RavenDB. PVS-Studio — статический анализатор для улучшения кода. RavenDB — Open Source база данных. Как поиск ошибок в одном проекте приводит к улучш…
BTCPay Server: топ-10 ошибок в коде финансового приложения для Bitcoin

Дата: 17 Май 2023

Автор: Святослав Размыслов

Наша компания пишет много материалов на тему качества кода. Некоторые проекты, выбранные для аудита кода, не очень близки всем читателям, но все из вас точно пользуются финансовыми приложениями. Може…
Топ-10 докладов на С# конференциях 2019-2022 года

Дата: 10 Май 2023

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

Небольшая подборка интересных докладов с конференций для C# и .NET разработчиков за последние несколько лет.
NullReferenceException в C#. Что это такое и как исправить?

Дата: 02 Май 2023

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

NullReferenceException (NRE) — тип исключения платформы .NET, возникающий при попытке обращения по нулевой ссылке. В заметке рассмотрим причины, из-за которых возникают исключения этого типа, а также…


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

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