1

次のように、元のファイル名とそのバージョンのダイジェストに基づいて、ファイルのいくつかのバージョンを保存しています。

$filename = sha1($original . ':' . $version);

ダイジェスト ($filename) を memcache にキーと値のペア (キーは元の + バージョン、値は sha1 ハッシュ) としてキャッシュする価値があるか、またはダイジェストを十分に迅速に生成します (トラフィックの多い PHP Web の場合)。アプリ)?

ありがとう、

ジョナサン

4

2 に答える 2

2

ハッシュをキャッシュしない方がはるかに優れています。短いファイル名で 100,000 個のハッシュを計算すると、私のラップトップ (適度に高速な Core 2 Duo) で約 1/2 秒かかります。

        byte[][] fileNames = Enumerable.Range(0, 100).Select(i => new UnicodeEncoding().GetBytes(System.IO.Path.GetRandomFileName())).ToArray();
        Stopwatch stopWatch = new Stopwatch();

        using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
        {
            stopWatch.Start();
            for (int j = 0; j < 1000; j++)
            {
                for (int i = 0; i < 100; i++)
                {
                    sha1.ComputeHash(fileNames[i]);
                }
            }
            stopWatch.Stop();
            Console.WriteLine("Total: {0}", stopWatch.Elapsed);
            Console.WriteLine("Time per hash: {0}", new TimeSpan(stopWatch.ElapsedTicks / 100000));
        }

合計: 00:00:00.5186110 ハッシュあたりの時間: 00:00:00.0000014

于 2010-03-31T04:50:28.250 に答える
0

特に小さな入力 (ファイルの名前やバージョンなど) の場合、ハッシュは非常に高速です。

ここで、ファイル自体をハッシュしていて、それらが非常に大きい場合、それは別の話になります (単に、ディスクからファイル全体を読み取るのに非常に時間がかかるためです)。

于 2010-03-31T03:45:56.800 に答える