Тебе гораздо лучше не кэшировать хеши. На моем ноутбуке вычисление 100 000 хэшей для коротких имен файлов занимает около 1/2 секунды (достаточно быстрый Core 2 Duo):
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