可能重复:
C#为什么相等的小数会产生不相等的哈希值?
我在我的.NET 3.5应用程序(x86或x64,我试过两个)中遇到了一个问题,其中具有不同数量的尾随零的小数具有不同的哈希码.例如:
decimal x = 3575.000000000000000000M;
decimal y = 3575.0000000000000000000M;
Console.WriteLine(x.GetHashCode());
Console.WriteLine(y.GetHashCode());
Console.WriteLine(x == y);
Console.WriteLine(x.GetHashCode() == y.GetHashCode());
Run Code Online (Sandbox Code Playgroud)
在我的机器上输出以下内容:
1085009409
1085009408
True
False
Run Code Online (Sandbox Code Playgroud)
我认为哈希码的差异是由不同比例因子引起的两个数字的不同内部表示.
虽然我可以通过删除尾随零来解决这个问题,但我总是假设GetHashCode应该为x和y返回相同的值,如果x == y.这个假设是错误的,还是Decimal.GetHashCode的问题?
编辑:要清楚我正在使用Visual Studio 2008 SP1,.NET 3.5的版本.
我有一个用C#/ .NET 3.5编写的客户端/服务器应用程序,我想对其进行一些性能测试.我一直在寻找一个通用的框架来帮助我,但没有太多运气.我想要一些可以管理一组客户端并根据某些设置为它们执行随机操作的东西.然后我还想记录一些与此相关的数据,以帮助我为我的系统工作超出粗略的阈值,例如,我可以支持n个用户每秒执行x次操作.
我会编写特定于我的应用程序的代码来执行以下任务:
我希望框架能够采用一组参数来描述测试场景,例如:
然后它将运行场景,管理和跟踪所有用户和操作并整理所有数据.(这是我试图避免自己编码的无聊位...)理想情况下,它会内置一些常规测量,例如发送消息和接收响应之间的时间,但如果没有,我可以自己编码.
我不想对我的代码进行任何分析; 我可以随后在运行这些测试时附加一个分析器.相反,我想对我的系统作出一些粗略的结论,即在断开之前我可以抛出多少用户.(如果有一个比'性能测试'更好的术语,请告诉我......压力测试可能吗?)
我意识到我在这里没有提供很多关于系统的细节.这让我感觉相当普遍 - 我确信有很多客户端/服务器系统需要人们进行类似的测试.我发现很多基于Web的框架都可以做类似的事情,但它们看起来很网络,并且不适合非基于HTTP的系统.
有人知道任何可能有用的东西吗?我的搜索还没有找到任何东西.我应该指出,我已经坚持使用Visual Studio 2008 Professional以实现可预测的未来,所以如果2010年可以做到这一点,那对我来说是不合适的.我想它不一定是.NET框架,只要我仍然可以很容易地插入我的.NET代码.
编辑要清楚我的应用程序不是一个网站,它是一个Windows窗体客户端应用程序,通过自定义协议连接到.NET服务.我可以编写代码来执行相关的客户端操作,我只需要一个框架来放入它.
我们最近升级到VS2010的最终版本,并且与2008年相同的代码相比,构建时间非常慢.我想知道是否有其他人正在经历相同的情况,所以我可以确定它是否只是我们的环境?一些细节:
其他人有类似的问题吗?
更新:看起来解析程序集引用需要很长时间.查看MSBuild诊断输出或上面的示例,第一个版本的ResolveAssemblyReferences有30ms,第二个版本有800ms.后续构建似乎需要更长时间的复制,例如CopyFilesToOutputDirectory从1ms跳到27ms.