Замедлять при хешировании файла - PullRequest
2 голосов
/ 04 апреля 2011

Я пытаюсь получить хэш файла, хранящегося в хранилище BLOB-объектов Windows Azure.

Я надеюсь затем сравнить хэш с версией, сохраненной на локальном компьютере, чтобы выяснить, есть лиразница.

Следующий код получает хэш.

        _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();

Проблема в том, что это работает нормально для небольших файлов, но я работаю с файлами размером более 100 МБ, и для этих файловслужба просто занимает слишком много времени и в конечном итоге истекает.

Мне интересно, если это правильный подход или есть другой способ определить, если два файла содержат одинаковые данные, которые будут работать быстрее для больших файлов.

Спасибо, Мэтт

Ответы [ 2 ]

3 голосов
/ 04 апреля 2011

Если я не ошибаюсь, проблема в том, что вы скачиваете весь файл здесь:

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

Это объясняет, почему это будет очень медленно для больших файлов и, вероятно, не выполнимо в качестве решения - яУ меня нет идеальной альтернативы, но идея состоит в том, чтобы сгенерировать хеш MD5, то есть на первых 5 КБ данных, и дополнительно сравнить размер файла - если оба совпадения, предположим, что они идентичны.

0 голосов
/ 04 апреля 2011

Может быть, вы можете использовать другой подход.Каждый раз, когда новый файл сохраняется и / или перезаписывается, сохраняйте номер версии в любом месте (база данных, другой связанный файл, ...).При локальном получении файлов также получите эту версию, чтобы ее было легко сравнивать.Конечно, я понятия не имею о вашей системе, так что, возможно, это вообще невозможно ...

...