释放输出比Debug慢:MD5CryptoServiceProvider.ComputeHash()

时间:2013-03-16 19:26:37

标签: c# optimization md5

我正在通过以下代码定期计算文件的MD5哈希值。这些文件大约是10MB。 当我在调试模式(Debug | x64)中运行我的程序时,对ComputeHash()的调用需要35ms,如果内置在发布模式(Release | x64),则需要400ms - 在没有附带调试器的情况下进行测试,对于同一文件并重新测试黏性的。

(我尝试使用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();
}

1 个答案:

答案 0 :(得分:0)

您是否通过Visual Studio运行发行版和调试版?如果是这样,请尝试直接在Visual Studio外部运行它们。通过Visual Studio运行它们将始终将调试器附加到您的进程,从而导致速度变慢。