我正在计算定期由下面的代码文件的MD5散列。这些文件大约是10MB。 当我以调试模式(Debug | x64)运行我的程序时,对ComputeHash()的调用需要35ms,如果以Release模式(Release | x64)构建,则需要400ms--两个测试都没有附加调试器,测试的时间很短。发布输出比调试慢:MD5CryptoServiceProvider.ComputeHash()
(我试过用visual studio express 2010和2012 - 结果相同)。
如何在Release模式下获得良好的Debug-Preformance?有任何想法吗? 在此先感谢!
代码:
public static string GetMD5HashFromFile(string fileName)
{
StringBuilder sb = new StringBuilder();
if (File.Exists(fileName))
{
var stream = File.Open(fileName, FileMode.Open, FileAccess.Read, IO.FileShare.ReadWrite);
MD5 md5 = MD5.Create();
//for benchmarking
var s = Stopwatch.StartNew();
byte[] retVal = md5.ComputeHash(stream);
//for benchmarking
System.Windows.MessageBox.Show(s.ElapsedMilliseconds.ToString());
stream.Close();
for (int i = 0; i < retVal.Length; i++)
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
我在visual studio 2008上测试过,对我来说调试和发布模式的性能差不多! – 2013-03-16 19:41:27
不要使用'Stopwatch' - 尝试使用'DateTime'对象并减去时间差。在上面 - 我不知道 – 2013-03-16 19:54:53
@AppDeveloper你使用了什么文件?一个“随机”10兆文件? – 2013-03-16 19:56:25