ハッシュをキャッシュしない方がはるかに優れています。短いファイル名で 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