快速确定C#中的一组文件是否相同?

时间:2009-07-01 18:11:36

标签: c# performance hash settings

我需要能够相对快速地确定我的应用程序之前是否已经处理了用户计算机上的一组文件。有问题的应用程序将用户的文件上传到服务器,如果文件之前已上载,则会跳过上传。到目前为止,我的计划是散列文件,然后存储结果以及它们如何上传到服务器的标识符。我认为我将遇到的问题是,由于哈希的长度,存储这些数据可能变得非常麻烦。我现在期待大约30-40个文件,但这可能会翻倍或(假设)甚至三倍。

是否可以使用Dictionary存储,以哈希为键,服务器信息为值?然后我将该Dictionary存储在App的Properties.Settings.Default对象中。使用该系统存储是否可行,或者我会遇到某种问题?请注意,由于应用程序的性质,两个用户都有 no 机会拥有相同的数据集,因此我不需要比较用户之间的上传。此外,这种类型的操作会有什么样的表现?用户应至少拥有Pentium-M 1.5 GHz处理器和1 GB RAM。

3 个答案:

答案 0 :(得分:2)

我可能不会把字典放到app.config文件中,虽然我猜你可以,这取决于服务器信息。我可能只是把它放在一个文本文件中,除非你因某些原因发现它更像是一个问题。对于应用程序而言,感觉就像 应用程序的

性能根本不应成为问题 - 词典的设计目标仍然是百万条目的效率,更不用说你谈论的数十或数百个。

答案 1 :(得分:1)

关于获取哈希值,我想我会提到这个......

使用哈希值是好的,只要每次都得到相同的结果而不会失败。我已经读过某个地方.GetHashCode()在不同版本的.NET之间是不一样的,所以如果你打算将哈希保存在持久状态,我会避免使用.GetHashCode()。如果一次全部完成,则.GetHashCode()非常适合比较事物是否相同。

如果你需要持久化散列,那么.NET中就有散列类。我当然不是这方面的专家,但我认为SHA1有一种散列方法。

答案 2 :(得分:0)

为什么不比较File Modified DateTime呢?为此,您需要在服务器上保存修改日期。