Memory consumption 如何实现低内存消耗?

Memory consumption 如何实现低内存消耗?,memory-consumption,low-memory,Memory Consumption,Low Memory,我想知道防病毒程序使用哪种技术扫描磁盘或文件并保持低内存消耗。它们也不会影响用户活动 我正在寻找一种方法,通过这种方法我们可以实现低内存消耗的磁盘扫描。他们没有。我所知道的每台扫描仪都会占用大量内存,并对性能产生影响。我认为您高估了这些扫描工具的简洁性。我见过他们经常占用大量内存,偶尔会占用cpu一段时间。它们还会劫持您的启动,以确保它们先启动,这会阻碍您的启动。NOD32占用的内存非常小,但内存仍为10-20MB 请记住AV在大多数情况下必须做什么-查看每个文件的可执行部分是否存在恶意字节。传

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


我正在寻找一种方法,通过这种方法我们可以实现低内存消耗的磁盘扫描。

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

我认为您高估了这些扫描工具的简洁性。我见过他们经常占用大量内存,偶尔会占用cpu一段时间。它们还会劫持您的启动,以确保它们先启动,这会阻碍您的启动。

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


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

您应该浏览内存映射文件。它们允许处理巨大的文件,而无需一次性将整个文件加载到内存中

我同意大多数人的看法,杀毒软件从来没有低内存或CPU消耗。然而,以下是我头脑中的一些想法:

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

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

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


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

您使用的是什么扫描仪?我的公司版(Sophos)是一个巨大的麻烦,也许你应该删除对防病毒程序的引用?正如人们所说,它们不是低资源利用率的光辉例子。当然你只是在寻找可以用来实现这一点的技术?他可能想写一段恶意代码,low resource=hidden.+1。我六年前就停止使用防病毒软件了,因为我发现在我所知道的每台机器上,它都会将系统性能减半。我知道,我要做的第一件事就是将我的数据库文件放在忽略列表上。这在dev机器上有点帮助。但要完全删除它,我认为如果你不小心将病毒(通过你的应用程序或电子邮件)分发给客户,而他们发现你没有运行任何防病毒的东西,你会遇到法律问题。但是对于每一次(或至少很多次)原始磁盘读取,你需要读取磁盘的其他部分才能获得所有签名。我不是在创建病毒扫描程序的背景下回答的,而是在磁盘扫描和一般文件处理的背景下回答的。然后他们派出战斗机,试图瞄准主端口正下方的一个三英尺排气口。:)啊,最后一个答案他可以做点什么:-)我想这归结为:如果你能证明一个文件自上次扫描以来没有改变,并且在上次扫描中,这个文件没有病毒,并且你的病毒定义自这次扫描以来没有改变。您不需要再次扫描该文件。是的。但这只是一个角落,你可以削减,以实现更好的性能。哦,顺便说一句-如果你没有注意到,我的建议都是以记忆换取性能。如果你想使用更少的内存,你不应该这样做。而是每次对文件进行散列,每次查找磁盘上的has。除了你需要的以外,不要在内存中保存任何东西。当然-性能可能有点低…;)