2009-07-01 88 views
1

我需要相对快速地确定用户计算机上的一组文件是否已由我的应用程序处理过。所讨论的应用程序将用户的文件上传到服务器,如果这些文件之前已经上传,则会跳过上传。到目前为止,我的计划是对文件进行散列处理,然后将结果和上传到服务器的标识符一起存储。我想我会遇到的问题是,由于哈希的长度,存储这些数据可能会变得非常麻烦。我预计目前大约有30-40个文件,但这可能会翻番或(假设)甚至三倍。快速确定一组文件在C#中是否相同?

这将有可能存储使用一个字典,哈希作为关键和服务器信息作为价值?然后我会将该Dictionary存储在App的Properties.Settings.Default对象中。用这个系统存储是否可行?还是我会遇到某种问题?请注意,由于应用程序的性质,有两个用户拥有相同数据集的机会有没有,所以我不需要比较用户之间的上传。另外,对于这种类型的操作,性能会如何?预计用户至少将拥有1 GB RAM的Pentium-M 1.5 GHz处理器。

回答

2

我可能不会把字典放到app.config文件中,虽然我猜你可以,这取决于服务器信息。我可能只是将它自己放在一个文本文件中,除非您发现由于某种原因而成为更多问题。感觉好像是更多的数据对于的应用比配置的应用程序。

性能不应该成为一个问题 - 字典的设计仍然有效,其中百万条目,更不用说数十或数百条了。

+0

我其实不会将它存储在app.config文件中,而是存储在user.config文件中。虽然你的观点很好,但我可能会把它分开。不需要user.config文件来气球!至于字典,我想知道是否有一个长度的大小关键它可以存储?如果我只是将这些哈希连接起来,那会起作用吗?对于性能,我担心文件的哈希。这些用户的笔记本电脑能够在合理的时间内完成此操作吗? – jasonh 2009-07-01 18:29:02

+0

没有必要开始连接哈希 - 每个哈希将相当短,字典无论如何可以应付长键。是的,笔记本电脑应该绝对适用于哈希 - 大多数哈希计算相对便宜;大部分时间将被读取文件。 – 2009-07-01 18:46:29

+0

我想我错过了一条重要的信息。这些文件集合在一起,因此,为每个文件创建一个字典条目是没有意义的,是吗? – jasonh 2009-07-01 18:55:08

1

在谈到获得哈希值,我想我会提到这一点...

使用哈希值是好的,只要你没有失败每次都得到相同的结果。我读过的地方.GetHashCode()在不同版本的.NET之间是不一样的,所以如果你打算把散列保存在持久状态,我会避免使用.GetHashCode()。如果全部一次完成,那么.GetHashCode()对于比较事情是否相同是比较理想的。

如果你需要保存哈希值,那么在.NET中有可用的哈希类。我承认不是这方面的专家,但我认为SHA1有一个哈希方法。

0

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

相关问题