Phi*_*hil 3 c# visual-studio-debugging visual-studio-2013
我的应用程序作为Windows服务运行,我将VS2013附加到它的调试过程.我正在获取图像文件内容的哈希码,以检查以下方法的差异(在静态类中):
static class FileUtils
{
public static int GetFileHash(string filePath)
{
int hash = 0;
Logger.WriteLog(ToolTipIcon.Info, "Calculating hash code for {0}", filePath);
StreamReader sr = new StreamReader(filePath, Encoding.Unicode);
hash = sr.ReadToEnd().GetHashCode();
sr.Close();
return hash;
}
}
Run Code Online (Sandbox Code Playgroud)
这在生产中一直很好.但是,对于两个不同的图像,此方法将始终返回2074746262.我试图在winforms应用程序中使用相同的代码和图像重现这一点,我不能.是否存在调试VS2013中的进程会导致此行为的问题?我用一个完全不同的图像替换了其中一个图像,但它仍然会发生.
首先,您应该知道您使用GetHashCode不正确,原因有两个:
散列码不是唯一的,只有很好的分布.存在有限数量的哈希码和无限数量的二进制字符串,因此在物理上不可能为每个字符串生成唯一的哈希码.
哈希码算法的详细信息明确没有记录,并且会因为与您无关的原因而更改.特别是,这不是我第一次看到它string.GetHashCode()在调试器下运行时报告更改行为:
string.GetHashCode()在debug vs release中返回不同的值,我该如何避免这种情况?
话虽如此,三个不同的二进制字符串在相同的运行时环境中以不同的方式散列,这取决于是否附加了调试器,这似乎有点不同寻常.除了一般不信任GetHashCode你,我的下一个猜测是你没有哈希你认为你正在哈希的东西.我会在对其进行散列之前将二进制数据本身转储到磁盘,并确认您确实拥有不同的二进制字符串.
| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |