如何实现低内存消耗?

时间:2009-07-29 13:14:24

标签: memory-consumption low-memory

我想知道防病毒程序使用哪种技术来扫描磁盘或文件并保持较低的内存消耗。它们也不会影响用户活动。

我正在寻找一种能够以低内存消耗实现磁盘扫描的方法。

6 个答案:

答案 0 :(得分:10)

他们没有。我所知道的每台扫描仪都会占用大量内存,并对性能产生影响。

答案 1 :(得分:3)

我同意大多数人的反病毒软件从未有过低内存或CPU消耗。但是,这里有一些想法:

  • 仅扫描用户打开的文件,仅在他打开文件时扫描。
  • 仅扫描有风险的文件 - 如可执行文件或脚本,而不是所有文件。
  • 扫描通常是通过对文件进行散列并针对已知病毒哈希加工哈希来完成的。为了最大限度地减少内存使用,您可以将已知的哈希值保留在磁盘上并在需要时搜索它们,但这样会非常慢。最快的方法是将它们全部保存在RAM中并禁止操作系统将它们交换出来,但这样会占用大量内存。可以通过几个级别的哈希缓存来实现权衡,例如:
    • 第一级缓存包含24位哈希作为位掩码。这占用大约16MB的RAM并且可以完全保存在RAM中(禁止操作系统将其交换出来)。检查这一点可以很快完成。
    • 二级缓存包含完整的128位或更大的哈希值,并保留在磁盘上。仅当第一级缓存被命中时,才测试第二级缓存。因为第一级缓存的哈希空间很小,所以可能会产生很多误报,因此必须检查二级缓存。
  • 缓存最后扫描的1000个文件的结果。这样,您就不必对所经常使用的文件进行所有散列和反复检查。

答案 2 :(得分:2)

NOD32的占用空间非常小,但内存仍为10-20MB。

请记住AV在大多数情况下必须做的事情 - 查看每个文件的可执行部分是否存在恶意字节。传统病毒通常少于1000个字节,可识别模式可能只有50个字节。因此,AV可以保护您免受100K病毒码的攻击,它只需要一个50 * 100K = 5MB的模式数据库。

答案 3 :(得分:1)

我认为你高估了这些扫描工具的精益度。我已经看到他们经常占用大量的内存,偶尔会在cpu中飙升一段时间。他们还劫持了你的创业公司,以确保他们先启动,这会阻碍你的创业。

答案 4 :(得分:1)

您应该探索内存映射文件。它们允许一个人处理大文件而无需一次将整个文件加载到内存中。

答案 5 :(得分:0)

直接扫描NTFS MFT ,找出NTFS文件系统结构(有可用的开源实现)。这是编写最有效代码的最佳方法,自己动手。

防病毒我相信使用低级设备驱动程序和积极的内存缓存来加速所谓的无影响访问。除非屏幕保护程序处于活动状态,否则我的AV(诺顿)永远不会扫描。

问题是,您的用户硬件仍然便宜。在大多数情况下,硬盘驱动器的速度很慢。如果性能太慢,请让您的用户升级到固态硬盘。笔记本电脑驱动器的速度也更慢。