x64比Windows 7 64位中的x86快得多,为什么?

时间:2014-07-31 13:36:46

标签: c# visual-studio-2012 performance-testing

我想创建一个非常基本的应用程序来测试64位与32位性能,只是为了看看哪一个在我的计算机上运行得最好。 令我惊讶的是,我发现x64比x86快约3倍。 我使用VS 2012 Ultimate编译发布,并作为一个独立的应用程序运行,无需调试。 这是一个带有按钮和2个文本框的WinForm应用程序。 在x64版本中需要大约120毫秒才能完成,而x86版本需要大约350毫秒。 此外,如果我将数据类型更改为int中的Int64,则两个代码路径的速度将变慢约3倍。

我知道x64在64位窗口上运行本机,32位通过WoW转换,但在线比较显示64位运行32位而没有显着的性能损失,除非它是使用我没有的Itanium CPU。 / p>

另一种可能性是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();
        }
    }

1 个答案:

答案 0 :(得分:0)

这里回答了一个非常类似的问题:Why is this faster on 64 bit than 32 bit?

该测试更复杂,有更多数学,但结果与我的相似甚至更极端,这意味着x64是可行的方法。