我正在编写一个比较大量文件的程序。
我首先按文件大小分组文件。然后我在分组文件之间逐字节检查它们。我可以在逐字节比较之前检查哪些参数或特性,以最大限度地减少使用它?
UPD: 要获得校验和,我需要阅读整个文件。我寻找一些可以过滤不相等文件的属性。我忘了说我需要100%相等的文件。散列函数有冲突。
答案 0 :(得分:2)
如果文件被操作系统记录为相同大小,那么除了检查字节之外,无法知道它们是否不同。
对于一组文件,一旦知道两个文件相同,则只需要对两个文件中的一个进行比较。出于这个原因,按日期对文件进行排序是明智的,因为具有相似日期的文件更可能是相同的。因此,您应该维护相同文件的列表。当进行新的比较时,只需将其与列表的头部进行比较。
您应该预先分配尽可能多的内存,并将列表头保留在内存中。
当进行比较时,你不应该实际比较字节,而是单词。例如,在32位机器上,您将从硬盘驱动器读取512字节块中的数据,然后每个块将一次比较4个字节。较新的x86处理器具有称为MMX的矢量化op指令。你想确定你正在使用它们。
如果您使用C语言编写Intel盒,请使用Intel的编译器,而不是Microsoft的编译器。仔细检查程序集以确保编译器没有做一些愚蠢的事情。
您还可以通过并行化来提高工作速度。这是通过创建线程来完成的。例如,如果代码在四核计算机上运行,则创建4个线程并在4个线程之间划分工作。
答案 1 :(得分:0)