Как добиться низкого потребления памяти? - PullRequest
2 голосов
/ 29 июля 2009

Я хочу знать, какую технику используют антивирусные программы для сканирования диска или файлов и поддержания низкого потребления памяти. Они также не влияют на активность пользователя.

Я ищу подход, с помощью которого мы можем добиться сканирования диска с низким потреблением памяти.

Ответы [ 6 ]

10 голосов
/ 29 июля 2009

Они не. Каждый известный мне сканер использует много памяти и влияет на производительность.

3 голосов
/ 29 июля 2009

Я согласен с большинством людей, что антивирусные программы никогда не имели низкого потребления памяти или процессора. Тем не менее, вот несколько идей из головы:

  • Проверять только файлы, которые пользователь открывает, только когда он их открывает.
  • Проверять только рискованные файлы - например, исполняемые файлы или сценарии, а не все файлы.
  • Сканирование обычно выполняется путем хэширования файла и обработки хеш-функции на основе известных хэшей вирусов. Чтобы минимизировать использование памяти, вы можете просто сохранить известные хэши на диске и искать их при необходимости, но это будет очень медленно. Самый быстрый способ - сохранить их все в оперативной памяти и запретить ОС менять их, но для этого потребуется много памяти. Компромисс может быть достигнут несколькими уровнями кеша, например:
    • Кэш 1-го уровня содержит 24-битные хэши в качестве битовой маски. Это занимает около 16 МБ ОЗУ и может быть полностью сохранено в ОЗУ (что запрещено ОС для его замены). Проверить это можно очень быстро.
    • Кэш 2-го уровня содержит полные 128-битные или более хэши и хранится на диске. Только в случае попадания в кэш первого уровня проверяется кэш второго уровня. Поскольку хэш-пространство кэша 1-го уровня мало, вероятно, получится много ложных срабатываний, поэтому необходимо проверить кэш второго уровня.
  • Кэшировать результаты последних, скажем, 1000 отсканированных файлов. Таким образом, вам не нужно делать все хеширование и проверять снова и снова файлы, которые часто используются.
2 голосов
/ 29 июля 2009

NOD32 занимает довольно небольшую площадь, но все еще занимает 10-20 МБ памяти.

Имейте в виду, что AV должен делать по большей части - смотреть на исполняемые части каждого файла на наличие вредоносных байтов. Традиционный вирус обычно меньше 1000 байт, идентифицируемые шаблоны могут быть только 50 байтами. Поэтому для защиты AV от шаблонов вирусов размером 100 КБ требуется только база данных шаблонов размером 50 * 100 К = 5 МБ.

1 голос
/ 29 июля 2009

Вы должны изучить файлы, отображенные в памяти. Они позволяют обрабатывать огромные файлы без загрузки всего файла в память за один раз.

1 голос
/ 29 июля 2009

Я думаю, что вы переоцениваете эффективность этих инструментов сканирования. Я видел, как они обычно берут огромные куски памяти и время от времени нагружают процессор. Они также угоняют ваш стартап, чтобы убедиться, что они запускаются первыми, что задерживает ваш стартап.

0 голосов
/ 08 апреля 2011

Сканирование NTFS MFT напрямую , определение структур файловой системы NTFS (доступны реализации с открытым исходным кодом). Это лучший способ написать наиболее эффективный код, сделайте это сами.

Антивирус. Я полагаю, что используются низкоуровневые драйверы устройств и агрессивные кеши памяти для ускорения так называемого безударного доступа. Мой AV (Norton) никогда не сканирует, если не активна заставка.

Проблема в том, что аппаратное обеспечение ваших пользователей все еще стоит дешево . Жесткие диски, по большей части, печально известны своей медлительностью. Попросите пользователей обновить твердотельный накопитель, если производительность слишком низкая. Кроме того, диски для ноутбуков еще медленнее.

...