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

本文关键字:为什么 x86 Windows 64位 x64 | 更新日期: 2023-09-27 18:15:53

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

我知道x64在64位windows上本机运行,32位通过WoW转换,但是在线比较显示32位在64上运行没有明显的性能损失,除非它与我没有的Itanium 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();
        }
    }

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

这里已经回答了一个非常类似的问题:为什么64位比32位更快?

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