我试图在文件服务器上找到给定唯一文件的所有重复项。这就是我所做的:
这可以完成工作但需要永远(我在文件服务器上有200k文件)所以我不得不考虑别的事情,这就是我所做的:
这将执行任务所需的时间从几小时减少到10分钟,但这仍然不太好,尤其是在尝试查找一堆文件的重复项时。每次文件搜索需要10分钟,这意味着100个文件需要16个小时!
是否有比哈希码更好的唯一文件标识符?获取哈希码是这个过程中耗时的事情。
谢谢,
答案 0 :(得分:4)
通过哈希码搜索重复项绝对是最慢的方式;很多磁盘i / o和cpu处理。
我在这个领域有一些经验,我们发现紧急方法是尽快消除文件:
在循环中打开/关闭所有这些文件句柄确实是一个轻微的开销,但不如完全读取所有文件。
答案 1 :(得分:2)
好吧,既然这个问题涉及通过常数因素而不是数量级来优化运行时间,那么我们必须更加具体地了解您实际处理的文件类型。
您目前有两种比较文件的方法 - 获取其大小(快速且不准确)并获取其哈希(“慢”且足够准确)。问题是,当文件大小不可忽略时,计算文件的散列可能需要一段时间。
因此,根据您实际拥有的输入类型,您可能会在这两者之间进行更多的比较操作(比文件大小慢,但更准确)。例如:
一般来说,如果你有很多类似大小的文件(这就是为什么你真的在后来的计算哈希上努力工作),那么这些文件很有可能有共同之处。鉴于您现在比我们更了解输入的类型,尝试提出不需要您阅读整个文件的比较标准,因此应该更快。
最后,当您拥有所有比较标准时 - 应用它们来创建输入的“桶”(输入列表与标准具有相同结果),从最快的标准开始,然后在每个桶中应用较慢的标准有多个输入。