2009-07-01 12 views
1

私は、ユーザーのマシン上の一連のファイルがアプリケーションによって以前に処理されたかどうかを比較的迅速に判断する必要があります。問題のアプリはそのユーザーのファイルをサーバーにアップロードし、以前にファイルがアップロードされていればアップロードをスキップします。これまでの私の計画では、ファイルをハッシュして、結果をサーバーにアップロードされた方法の識別子とともに格納していました。私が考えている問題は、このデータを格納することは、ハッシュの長さのために非常に面倒になる可能性があるということです。私は約30-40のファイルを期待していますが、それは倍増する(または仮説的に)三倍さえすることができます。C#で一連のファイルが同一であるかどうかを素早く判断できますか?

これは、辞書を使用して、ハッシュをキーとして、サーバー情報を値として保存することは可能でしょうか?その後、そのDictionaryをAppのProperties.Settings.Defaultオブジェクトに格納します。そのシステムに保存することは可能か、それとも問題が発生しますか?アプリケーションの性質上、にはという2人のユーザーが同じデータセットを持つ可能性があるので、ユーザー間のアップロードを比較する必要はありません。さらに、このタイプの操作にはどのようなパフォーマンスが必要ですか?ユーザーにはPentium-M 1.5 GHz以上のRAMと1 GBのRAMが必要です。

答えて

2

おそらく、サーバー情報によっては、app.configファイルに辞書を置くことはできません。あなたがそれが何らかの理由でもっと問題になることが分かっていない限り、私はたぶんそれをテキストファイルに入れておきます。それはより多くのデータのように感じるアプリケーションよりのアプリケーションより。

パフォーマンスはまったく問題ではありません。辞書は、百万、のエントリで効率的になるように設計されています。ハッシュ値を得るために参照する

+0

私は実際にapp.configファイルではなくuser.configファイルに格納しようとしていました。あなたのポイントは良いものですが、私はそれを別にしておきます。 user.configファイルをバルーンにする必要はありません!ディクショナリについては、それが格納できるサイズのキーに長さがあるかどうか疑問に思っていましたか?もし私がちょうどハッシュを連結するなら、それはうまくいくのだろうか?そしてパフォーマンスのために、私はファイルのハッシュについて心配しています。これらのユーザーが妥当な期間にこれを行うことができるでしょうか? – jasonh

+0

ハッシュの連結を開始する必要はありません。各ハッシュはかなり短く、辞書は長いキーにも対処できます。そして、はい、ノートパソコンはハッシュのために絶対にうまくいくはずです - ほとんどのハッシュは比較的計算上安いです。ファイルを読むだけで時間がかかります。 –

+0

私は重要な情報が欠けていたと思う。ファイルは1つのセットとしてまとめられているので、ファイルごとに1つの辞書エントリを作成するのは実際には意味がありません。 – jasonh

1

は、私は長い間、あなたが同じ結果に必ず毎回取得するよう、ハッシュ値が良いです使用

...これを言及しようと思いました。私は別のバージョンの.NETでは.GetHashCode()が同じではないので、永続的な状態でハッシュを保存する予定がある場合は、.GetHashCode()を避けてください。すべてが一度に完了すると、.GetHashCode()は、状況が同じであるかどうかを比較するのに最適です。

ハッシュを永続化する必要がある場合は、.NETで利用可能なハッシュクラスがあります。私は確かにこれの専門家ではないが、私はSHA1がハッシング方法を持っていると思う。

+0

ファイルに関しては、ハッシュは通常、SHA1、MD5などを指します - GetHashCode()ではありません。私は確かに*仮定* OPは何を意味した... –

+0

これはたぶんそうだったが、何人かはそれを知らないので、とにかくそこに投げ捨てると思った。 – Hugoware

+0

はい、それはまさに私が意味していたものです。ありがとうMr. Skeet。 :) – jasonh

0

代わりにファイル変更日時を比較してみませんか?このためには、変更した日付をサーバーに保存する必要があります。

+0

私はむしろそれをやりたいと思います。サーバーへのSCPアクセスがありますが、ネットワークトラフィックを最小限に抑えたいので、同じデータを再アップロードする必要はありません。ユーザベースが大きくなり、ユーザ間のファイル衝突が不可能であるため、非常に無駄になると、サーバのカタログをプルダウンすると非常に遅くなる可能性があります。 – jasonh

関連する問題