2009-01-31 2 views
12

Я использую C#, .NET, VS.NET 2008.Как скомпилировать мое приложение для 64-битного, сделать его быстрее или лучше?

Помимо возможности адресовать больше памяти, в чем преимущества компиляции моего приложения на 64-битный?

Будет ли это быстрее или меньше? Зачем?

Является ли он более совместимым с системой x64 (по сравнению с 32-разрядным приложением)?

ответ

16

Для родных приложений вы получаете преимущества, такие как увеличенное адресное пространство и еще много чего. Тем не менее, .NET-приложения запускаются в среде CLR, которая абстрагирует любые основные различия в архитектуре.

Предполагая, что вы просто управляетесь с управляемым кодом, нет никакой выгоды для таргетинга на определенную платформу; вам лучше просто скомпилировать флаг «anycpu» (который включен по умолчанию). Это создаст агностические сборки платформы, которые будут одинаково хорошо работать на любой из архитектур CLR.

Специально предназначенный для ориентации (скажем) x64 не даст вам никакого повышения производительности и не позволит вашим сборкам работать на 32-битной платформе.

This article имеет немного больше информации по этому вопросу.

Обновление: Скотт Гензельман только что разместил хорошее overview этой темы.

4

Теоретически, программа, скомпилированная для x64, будет работать быстрее, чем программа, скомпилированная для x86. Причина этого в том, что в архитектуре x64 есть более общие регистры. 32-разрядный x86 имеет только 4 регистра общего назначения. AMD добавила еще 8 универсальных регистров в свои расширения x64. Это позволяет уменьшить нагрузку на память и (немного) более высокую производительность.

В действительности, это не имеет большого значения в производительности, но оно должно сделать небольшое.

Размер двоичного файла и объема памяти немного увеличится от использования 64-разрядных инструкций, но поскольку x64 все еще является архитектором CISC, размер двоичного файла не удваивается, как в архитектуре RISC. Большинство инструкций по-прежнему короче 64 бит.

+0

Спасибо за объяснение! – Jason

0

Я действительно не эксперт в архитектуре процессора, поэтому внимательно следите за моими комментариями. В Википедии есть статья, описывающая архитектуру x86-64 (link text).

У x86-64 больше регистров, это само по себе должно помочь сделать программу быстрее. Кроме того, эта новая архитектура предлагает новые наборы инструкций, которые могут повысить скорость, если компилятор использует ее.

Другим фактором, который необходимо учитывать, является количество доступных наборов инструкций. Когда программа скомпилирована для x86, обычно ее целью является запуск всех существующих 32-разрядных CPUS (Pentium 1, 2, 3, 4, core * и т. Д.). Каждое новое поколение процессоров добавляет новые наборы инструкций, эти инструкции не могут использоваться программой, которая хочет быть полностью переносимой в двоичном формате среди всех x86 CPUS. Поскольку x86-64 бит представляет собой новую архитектуру, перекомпиляция программы для этой машины дает компилятору более широкий набор инструкций для использования, не беспокоясь слишком много о бинарной совместимости между 64-разрядным CPUS-интерфейсом.

2

Я сомневаюсь в этом (учитывая платформу C# /. NET), если вы не используете собственный код. Помните, что .NET управляемый код компилируется в IL, и платформа коммутатора по умолчанию AnyCPU, так что вы должны получить лучшую производительность на 64-битных ОС с существующими двоичном:

http://blogs.msdn.com/gauravseth/archive/2006/03/07/545104.aspx

Эта статья имеет массу полезную информацию, в том числе относительно инструмента CorFlags, который позволит вам проверить PE-заголовок.

В общем, для собственных двоичных файлов кода да.

3

Как факт, 64-битные приложения, которые не требуют большого объема памяти, имеют тенденцию работать медленнее. Одной из причин этого является то, что вам нужно перемещать данные перемещения. Если вы не можете использовать> 2 ГБ пространства памяти (например, для кэширования), я бы не рекомендовал его.

Вот интересная ссылка Я только что нашел http://www.osnews.com/story/5768 с большим количеством информации.

 Смежные вопросы

  • Нет связанных вопросов^_^