【发布时间】:2014-07-31 13:36:46
【问题描述】:
我想创建一个非常基本的应用程序来测试 64 位和 32 位的性能,看看哪个在我的计算机上运行得最好。 令我惊讶的是,我发现 x64 比 x86 快大约 3 倍。 我使用为发布而编译的 VS 2012 Ultimate 并作为独立应用程序运行而无需调试。 这是一个带有一个按钮和 2 个文本框的 WinForm 应用程序。 在 x64 版本中完成大约需要 120 毫秒,而 x86 构建大约需要 350 毫秒。 另外,如果我将数据类型从 int 更改为 Int64,那么两个代码路径都会慢 3 倍左右。
我知道 x64 在 64 位 Windows 上本机运行,而 32 位是通过 WoW 转换的,但在线比较表明,在 64 上运行 32 位并没有显着的性能损失,除非它使用的是我没有的安腾 CPU。
另一种可能性是 VS2012 编译器针对 x64 进行了更多优化,但与通用 VS 优化相比,3 倍的性能差异合理吗?
无论哪种方式,似乎我最好尽可能在我的机器上编译到 x64。 谁能给我任何 x86 可能更好的简单案例?
这是我的测试代码。
DateTime startTime;
DateTime stopTime;
int waitValue;
private void button1_Click(object sender, EventArgs e)
{
string startText = textBox1.Text;
int value;
if (int.TryParse(startText, out value))
{
waitValue = value - 1;
}
else
{
value = 1000000;
waitValue = value - 1;
textBox1.Text = value.ToString();
}
startTime = DateTime.Now;
for (int ii = 0; ii < value; ii++)
{
shortProcess(ii);
}
}
private int shortProcess(int value)
{
int startValue = value;
int useVal = startValue;
for (int ii = 0; ii < 1000; ii++)
{
useVal = ii;
}
useVal = startValue;
checkValue(useVal);
return useVal;
}
private void checkValue(int value)
{
if (value >= waitValue)
{
stopTime = DateTime.Now;
//textBox2.Text = (stopTime.Ticks - startTime.Ticks).ToString();
textBox2.Text = (stopTime.Subtract(startTime).TotalMilliseconds).ToString();
}
}
【问题讨论】:
-
只是一个评论-据我所知,如果您在 64 位版本的 Windows 下运行 64 位应用程序,那是“本机”,但如果您从相同版本的 Windows 运行 32 位应用程序,它必须翻译,以便 64 位架构可以正确读取,这可能不会影响您的代码,只是认为值得一提
-
“我想知道这些结果是否是典型的,您是否可以发布您的结果” - 我们不是测试平台社区,您不太可能会被大量样本数据淹没。此外,您还需要了解处理器、操作系统、配置等等。此外,您的示例代码也不适用于基准测试,您可能想检查您是否真的只测试一件事(您不是)。
-
很有可能您看到的是 x64 JIT 优化器优于 x86 JIT 优化器的结果(至少在这个人工测试用例中)。如果您edited 要求解释,而不是尝试进行投票,这可能是一个可以接受的问题。
-
我按照建议将代码编辑为更多问题。我看过其他帖子和其他一些帖子,但每个帖子都非常笼统,没有任何可测试的结论。我也不知道这是否仅限于我的机器或仅适用于 VS 2012,这就是为什么我正在寻找确认或任何我可以做的事情来改进我的测试。
标签: c# visual-studio-2012 performance-testing