Ответ 1
Джо Уайт дал вам несколько веских причин, почему ваше приложение может быть медленнее. Более крупные указатели (и, следовательно, более крупные ссылки в .NET) занимают больше места в памяти, а это значит, что меньше кода и данных будет вписываться в кеш.
Однако есть много полезных причин, по которым вы можете использовать x64:
-
Соглашение о вызове AMD64 по умолчанию используется в x64 и может быть немного быстрее, чем стандартный cdecl или stdcall, причем многие аргументы передаются в регистры и используют регистры XMM для плавающей запятой.
-
CLR будет выдавать скалярные инструкции SSE для работы с операциями с плавающей запятой в 64-разрядной версии. В x86 он возвращается к использованию стандартного стека x87 FP, который довольно медленный, особенно для таких вещей, как преобразование между int и float.
-
Наличие большего количества регистров означает, что вероятность того, что JIT будет израсходована из-за давления в регистре, будет гораздо меньше. Регистры разливов могут быть довольно дорогостоящими для быстрых внутренних петель, особенно если функция встраивается и вводит дополнительное давление в регистре.
-
Любые операции с 64-битными целыми числами могут быть чрезвычайно полезны, если они могут вписаться в один регистр, а не разбиваться на две отдельные половины.
-
Это может быть очевидным, но дополнительная память, к которой может обращаться ваш процесс, может быть весьма полезна, если ваше приложение интенсивно использует память, даже если оно не достигает теоретического предела. Фрагментация может привести к тому, что вы ударите "из памяти" до тех пор, пока не достигнете этой отметки.
-
RIP-относительная адресация в x64 может в некоторых случаях уменьшить размер исполняемого изображения. Хотя это действительно не относится непосредственно к приложениям .NET, это может повлиять на совместное использование DLL, которые в противном случае могут быть перенесены. Мне было бы интересно узнать, имеет ли кто-нибудь конкретную информацию об этом в отношении .NET и управляемых приложений.
Кроме того, x64-версия среды выполнения .NET, по крайней мере, в текущих версиях, выполняет больше оптимизаций, чем эквивалент x86. Такие вещи, как inlining и выравнивание памяти, похоже, происходят гораздо чаще. Фактически, была некоторая ошибка, которая препятствовала встраиванию любого метода, который взял или вернул тип значения; Я помню, что он зафиксирован в x64, а не в версии x86.
Действительно, единственный способ узнать, что лучше для вашего приложения, - это выполнить профилирование и тестирование на обеих архитектурах и сравнить реальные результаты. Тем не менее, я лично просто использую любой CPU везде, где это возможно, и избегайте того, что по своей природе зависит от архитектуры. Это упрощает сборку и развертывание, и, мы надеемся, будет более перспективным доказательством, когда большинство пользователей начнут переходить на x64 исключительно.