在64位平台上Int32与Int64的性能?

时间:2011-09-11 02:30:03

标签: .net

我的问题相对简单。在32位平台上,最好使用Int32而不是短路或长路,因为cpu一次处理32位。那么在64位架构上这是否意味着使用long来提高性能会更快?我创建了一个快速而又脏的应用程序,它复制int和long数组来测试基准测试。这是代码(我确实警告它很脏):

static void Main(string[] args)
    {
        var lar = new long[256];

        for(int z = 1; z<=256;z++)
        {
            lar[z-1] = z;
        }
        var watch = DateTime.Now;
        for (int z = 0; z < 100000000; z++)
        {
            var lard = new long[256];
            lar.CopyTo(lard, 0);

        }
        var res2 = watch - DateTime.Now;

        var iar = new int[256];

        for (int z = 1; z <= 256; z++)
        {
            iar[z - 1] = z;
        }

        watch = DateTime.Now;

        for (int z = 0; z < 100000000; z++)
        {
            var iard = new int[256];
            iar.CopyTo(iar, 0);

        }

        var res1 = watch - DateTime.Now;
        Console.WriteLine(res1);
        Console.WriteLine(res2);


    }

它产生的结果比int快3倍。这让我很好奇我是否应该开始使用longs作为计数器等。我也做过类似的反试验,长时间的速度微不足道。有没有人对此有任何意见?我也明白,即使多头更快,他们仍然会占用两倍的空间。

2 个答案:

答案 0 :(得分:3)

没有。在32位CPU上执行64位需要更长的时间,因为CPU一次只能处理32位。 64位CPU只会忽略丢失的32位。

另外,尽量不要先抢先优化。只有在存在明显瓶颈时才进行优化。

答案 1 :(得分:2)

这里有一个类似的问题:Will using longs instead of ints benefit in 64bit java

通常,在实际应用程序中,您更关心缓存未命中,因此这不是一个整体问题。