2013-03-16 30 views
3

我正在计算定期由下面的代码文件的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(); 
} 
+0

我在visual studio 2008上测试过,对我来说调试和发布模式的性能差不多! – 2013-03-16 19:41:27

+0

不要使用'Stopwatch' - 尝试使用'DateTime'对象并减去时间差。在上面 - 我不知道 – 2013-03-16 19:54:53

+0

@AppDeveloper你使用了什么文件?一个“随机”10兆文件? – 2013-03-16 19:56:25

回答

0

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

+0

进行性能检查时,我总是使用优化版本并单独运行程序(不附带调试器)。 – user2177774 2013-07-21 18:53:01