MD5 と SHA1 はネイティブ実装に依存していますが、メソッド呼び出しの数を少し減らしてネイティブ実装を最適化できる可能性があるため、C++ ソリューション + introp の方がわずかに高速になる可能性があります。
ネイティブ (SHA1CryptoServiceProvider) は、マネージド (SHA1Managed) よりも 3 倍高速になる可能性があることに注意してください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Security.Cryptography;
namespace ConsoleApplication22 {
class Program {
static void Profile(string description, int iterations, Action func) {
// clean up
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
// warm up
func();
var watch = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
static void Main() {
SHA1Managed managed = new SHA1Managed();
SHA1CryptoServiceProvider unmanaged = new SHA1CryptoServiceProvider();
Random rnd = new Random();
var buffer = new byte[100000];
rnd.NextBytes(buffer);
Profile("managed", 1000, () => {
managed.ComputeHash(buffer, 0, buffer.Length);
});
Profile("unmanaged", 1000, () =>
{
unmanaged.ComputeHash(buffer, 0, buffer.Length);
});
Console.ReadKey();
}
}
}
管理経過時間 891 ミリ秒
管理されていない経過時間 336 ミリ秒
また、私の計算が間違っていない限り、管理されていない実装は約 300 ミリ秒で 100 MB のデータをハッシュしていることに注意してください。これがボトルネックになることはほとんどありません。