2

Windows Azure Blob Store に保存されているファイルのハッシュを取得しようとしています。

次に、ハッシュをローカル マシンに保存されているバージョンと比較して、違いがあるかどうかを確認したいと考えています。

次のコードはハッシュを取得します。

        _CloudBlobClient = SetupCloudBlobClient();
        CloudBlobContainer cbContainer = _CloudBlobClient.GetContainerReference(sContainer);
        CloudBlockBlob cbBlob = cbContainer.GetBlockBlobReference(sBlob);

        BlobStream stream = cbBlob.OpenRead();
        StringBuilder sb = new StringBuilder();

        MD5 md5 = MD5CryptoServiceProvider.Create();
        byte[] hash = md5.ComputeHash(stream);
        foreach (byte b in hash)
            sb.Append(b.ToString("x2"));

        return sb.ToString();

問題は、これは小さなファイルでは問題なく機能しますが、100MB を超えるファイルで作業していて、これらのファイルの場合、サービスに時間がかかりすぎて最終的にタイムアウトになることです。

これが正しいアプローチなのか、それとも 2 つのファイルに同じデータが含まれているかどうかを判断する別の方法があるのか​​どうか疑問に思っています。

ありがとう、マット

4

2 に答える 2

3

私が間違っていなければ、問題はあなたがここにファイル全体をダウンロードしていることです:

byte[] hash = md5.ComputeHash(stream);

これは、これが大きなファイルで非常に遅くなる理由を説明しており、おそらく解決策として実行可能ではありません.完璧な代替手段はありませんが、データの最初の 5 KB で MD5 ハッシュのみを生成し、さらに比較することが考えられます.ファイルサイズ - 両方が一致する場合、それらは同一であると想定します。

于 2011-04-04T04:14:07.150 に答える
0

もしかしたら、別のアプローチを取るかもしれません。新しいファイルが保存および/または上書きされるたびに、バージョン番号を任意の場所 (データベース、別の関連ファイルなど) に保持します。ファイルをローカルで取得する場合は、このバージョンも取得してください。比較が容易になります。もちろん、私はあなたのシステムについて何も知らないので、これはまったく不可能かもしれません...

于 2011-04-04T04:28:28.250 に答える