我的问题相对简单。在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作为计数器等。我也做过类似的反试验,长时间的速度微不足道。有没有人对此有任何意见?我也明白,即使多头更快,他们仍然会占用两倍的空间。
答案 0 :(得分:3)
没有。在32位CPU上执行64位需要更长的时间,因为CPU一次只能处理32位。 64位CPU只会忽略丢失的32位。
另外,尽量不要先抢先优化。只有在存在明显瓶颈时才进行优化。
答案 1 :(得分:2)
这里有一个类似的问题:Will using longs instead of ints benefit in 64bit java
通常,在实际应用程序中,您更关心缓存未命中,因此这不是一个整体问题。