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

.net 64位平台上的Int32与Int64性能?,.net,.net,我的问题相对简单。在32位平台上,最好使用Int32,而不是短或长,因为cpu一次处理32位。因此,在64位体系结构上,这是否意味着使用long可以更快地提高性能?我创建了一个快速而肮脏的应用程序,它复制int和long数组来测试基准测试。下面是代码(我警告过它脏了): static void Main(字符串[]args) { var lar=新长[256]; 对于(int z=1;z否)。在32位CPU上执行64位操作需要更长的时间,因为CPU一次只能处理32位。64位CPU只会忽略缺少的3

我的问题相对简单。在32位平台上,最好使用Int32,而不是短或长,因为cpu一次处理32位。因此,在64位体系结构上,这是否意味着使用long可以更快地提高性能?我创建了一个快速而肮脏的应用程序,它复制int和long数组来测试基准测试。下面是代码(我警告过它脏了):

static void Main(字符串[]args)
{
var lar=新长[256];

对于(int z=1;z否)。在32位CPU上执行64位操作需要更长的时间,因为CPU一次只能处理32位。64位CPU只会忽略缺少的32位


另外,不要先发制人地进行过多优化。只有在出现明显瓶颈时才进行优化。

这里有一个类似的问题:


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

我想您误解了我的说法。我同意在32位上使用64位大小的类型需要更长的时间。我的问题是,在64位cpu上,我是否应该使用long而不是int,因为long是64位的,int是32位的。“64位CPU只会忽略丢失的32位"。速度没有差别。无论如何,如果你试图在CPU级别进行优化,不要使用编译成字节码的语言,使用汇编语言或C。Java编译成字节码,.NET编译成IL。我只是好奇。如果这是真的,它会被忽略,那么为什么在32位系统上使用shorts会更慢。shorts是两个字节,而且会变慢在32位cpu上填充到32位。据我所知,如果您使用的类型小于cpu架构,它会将其填充为与之相等。这意味着如果您使用短(2字节)有了32位的cpu,当它被处理时,它会将短的部分填充到32位。之后,当它被读取时,只读取前16位。为什么在我的复制示例中使用long比使用int快3倍?这是我上面评论的延续。我真的很好奇。而且我不知道汇编,也不喜欢C或即使是C++,因为解释的语言也简单很多。因此这就提出了几个问题。1)为什么我的测试应用程序显示了长约3倍的速度,如int?2),C++语言是如何处理的,因为它是64位的。它们使用短裤而不是int型吗?对于初学者来说,使用秒表代替DATETIME。(对于这类性能测试更准确)。第二,在int迭代中,您将iar复制到自身。不确定这是否会影响任何东西,只是以防万一。
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);


    }