2008-11-11 2 views
2

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

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

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

Спасибо.

ответ

2

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

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

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

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

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