﻿# Работа PVS\-Studio с антивирусом Microsoft Security Essentials/Windows Defender

В операционной системе Windows 8 корпорация Microsoft впервые включает в набор стандартных предустановленных программ свой собственный антивирус — Windows Defender\. На самом деле Windows Defender включался в состав и предыдущих версий Windows, но выполнял в них роль антишпионского malware фильтра\. Последняя же версия Windows Defender фактически интегрирует в себя бесплатный антивирус Microsoft Security Essentials , который раньше доступен для бесплатной загрузки, но не включался в Windows по умолчанию\.

При работе с активным антивирусом Microsoft Security Essentials /Windows Defender у PVS\-Studio, в зависимости от настроек анализа и конфигурации пользовательской системы, может наблюдаться значительное снижение производительности при проверке C/C\+\+ файлов\. Перед началом непосредственно статического анализа, PVS\-Studio\.exe для каждого из файлов с исходным кодом вызывает внешний препроцессор для получения полного intermediate препроцессировнного файла, т\.е\. C/C\+\+ файла с включёнными заголовочными файлами и раскрытыми макросами\. PVS\-Studio может использовать из Visual Studio в качестве препроцессора как родной препроцессор Visual C\+\+ cl\.exe, так и сторонний clang\.exe, поставляемый в дистрибутиве PVS\-Studio\. Проблема возникает именно в случае использования препроцессора cl\.exe\. Мы уже отписали о данной проблеме в поддержку Microsoft Visual C\+\+\.

В частности, при использовании в качестве препроцессора родного компилятора Visual C\+\+ cl\.exe на многоядерной машине \(когда анализ запускается в несколько параллельных потоков для нескольких файлов одновременно\), наблюдается искусственное ограничение \(нужно полагать, что со стороны MSE/Windows Defender\) на использование ресурса процессора в 25% суммарно для всех запущенных процессов cl\.exe\. Что это означает на практике? При запуске, например, 4\-х процессов cl\.exe на 4\-х ядерной машине, максимальная суммарная нагрузка этих процессов не превысит 25%, т\.е\. каждому cl\.exe достанется только приблизительно по 6% процессорного времени\. Но мы ожидаем, что каждый из данных процессов должен будет получить по 25% времени процессора \(конечно, при отсутствии какой\-либо другой фоновой нагрузки на процессор\)\! Понятно, что такое снижение производительности для каждого из cl\.exe приведёт к значительному увеличению времени анализа каждого из проверяемых файлов\. Наши эксперименты показали, что ограничение в 25% не связано с количеством ядер в системе, и на 8\-ми ядерной машине ограничение в 1/4 также оставалось неизменным, и даже принудительная привязка процессов cl\.exe к разным ядрам не изменяла картины\.

В общем случае, при использовании статического анализатора PVS\-Studio совместно с антивирусным ПО, мы рекомендуем всегда добавлять как сам модуль анализа \(PVS\-Studio\.exe\), так и вызывающие его программы и пути до них \(например, devenv\.exe — основной исполняемый модуль среды Visual Studio\) в исключения антивирусов\. К сожалению, на данный момент добавление анализатора PVS\-Studio\.exe \(ровно как и devenv\.exe, cmd\.exe и даже cl\.exe\)  в исключения MSE/Windows Defender или даже отключение защиты в реальном времени \(real\-time protection\) не решают проблему падения производительности препроцессора cl\.exe\. Только полное отключение MSE/Windows Defender \(либо замена его на другой антивирус\) позволяет использовать 100% вычислительных ресурсов процессора для препроцессирования\. 

Возникает вопрос: как обстоят дела со сборкой Visual C\+\+  проектов, используя тот же cl\.exe, непосредственно из среды Visual Studio? Для того чтобы сборка прошла параллельно, т\.е\. было запущено несколько процессов cl\.exe, необходим solution с несколькими проектами\. Обычный запуск сборки подобного решения \(на 87 проектов Visual C\+\+ 10\.0\) на первый взгляд не выявил проблем\. Однако, добавление в настройки каждого из этих проектов флагов компиляции /P и /c \(т\.е\. препроцессировать в i файл и не линковать\) привело к повторению описанной выше картины: 8 процессов cl\.exe работали с нагрузкой в 2\-3 процента каждый, т\.е\. общая загрузка процессора опять не превышала 25%\. Таким образом это подтверждает, что проседание производительности препроцессора Visual C\+\+ при работе в связке с MSE/Windows Defender не зависит от типа его запуска, запущен ли он из анализатора PVS\-Studio, среды Visual Studio или даже вручную из cmd файла\. Мы же можем лишь предположить, что при включённом режиме препроцессирования cl\.exe начинает генерировать на диске промежуточный i файл, что по какой\-то причине и не нравится данному антивирусу\.