Подтвердить что ты не робот

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

Я использую С#,.NET, VS.NET 2008.

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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