Программирование для 64-битной платформы - PullRequest
2 голосов
/ 11 ноября 2008

Работая над приложением .Net (скажем, Asp.Net), есть ли различия в том, как вы работали бы при работе на 64-битной платформе, по сравнению с работой на 32-битной платформе.

Я бы вообразил очень мало, так как вы работаете над фреймворком, а фреймворк заботится о большинстве вещей для вас, верно?

Но, пожалуйста, оставьте свои комментарии.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 ноября 2008

Если вы используете p / invoke, вы должны быть уверены, что у вас есть 64-битные версии доступных DLL-библиотек. Это не проблема, если вы вызываете предоставляемые MS библиотеки DLL, такие как kernel32, так как они имеют одинаковые имена на 32- и 64-битных платформах (странно, я знаю), и поэтому ваше 64-битное приложение неявно ссылается на правильные версия. Однако если вы используете сторонние библиотеки DLL и ваше 64-битное приложение пытается установить связь с 32-битной библиотекой DLL, вы получите исключение времени выполнения.

Это также означает, что если вы используете внутрипроцессный COM-объект, у вас возникнут проблемы. 64-битное приложение может вызывать внепроцессный COM-объект, который является 32-битным (и наоборот), когда вы пересекаете границу процесса, и COM позаботится о распределении для вас.

Кроме этого, фреймворк заботится о большинстве вещей для вас. Вам никогда не придется беспокоиться о размерах указателя, а типы clr имеют явные размеры (int всегда 32 бит, длинный всегда 64 бит). В чистом мире .NET очень мало о чем беспокоиться. Когда вы начинаете выходить из песочницы, вам следует быть более осторожным.

2 голосов
/ 11 ноября 2008

Есть два случая, когда рассмотрение 64-битной скорости может быть интересным:

  1. вам нужно учитывать контейнеры, которые имеют более 2 ^ 31 элементов. Свойство стандартного массива .Length возвращает Int32 и поэтому не может представлять большие массивы, которые вы не можете создать в 32-битной виртуальной машине в любом случае. В 64-битной виртуальной машине вы должны использовать LongLength (если вы не знаете, что у вас менее 2 ^ 31 элементов). К сожалению, многие стандартные классы коллекций, похоже, вообще не поддерживают большое количество элементов.
  2. вы можете использовать тип long с меньшим беспокойством о производительности: в 64-битной версии long вписывается в регистр, тогда как в 32-битной версии для JIT-кода потребуется несколько машинных инструкций для одной длинной операции .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...