Int32 против производительности Int64 на 64-битной платформе?
Мой вопрос относительно просто. На 32-битных платформах лучше всего использовать Int32, а не короткие или длинные из-за процессора, обрабатывающего 32 бита за раз. Таким образом, в 64-битной архитектуре это означает, что быстрее использовать длинные рабочие характеристики? Я создал быстрое и грязное приложение, которое копирует int и длинные массивы для тестирования тестов. Вот код (я его предупреждал):
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);
}
Полученные результаты дают примерно в 3 раза быстрее, чем int. Что заставляет меня любопытно, следует ли мне начинать использовать долготы для счетчиков и т.д. Я также сделал аналогичный тест-тест и долгое время был несущественным. Кто-нибудь имеет на это свой вклад? Я также понимаю, что даже если длинные будут быстрее, они будут занимать в два раза больше места.
Ответы
Ответ 1
Нет. Для 32-разрядного процессора требуется 64-разрядное время, потому что процессор может обрабатывать только 32 бита за раз. 64-битный процессор будет просто игнорировать отсутствующие 32-битные.
Кроме того, постарайтесь не превентивно оптимизировать слишком много. Оптимизируйте только тогда, когда есть заметное узкое место.
Ответ 2
Здесь есть аналогичный вопрос: Будет использовать longs вместо ints в 64-битной java
Как правило, в реальном приложении вас больше беспокоит промахи в кэше, так что это в меньшей степени вызывает беспокойство.