Есть ли какие-либо соображения, которые необходимо предпринять для запуска вашей программы .net на x64 vs x86?

Я считаю, что тип архитектуры (x86 vs x64) абстрагируется для вас при создании .Net-программ, но есть ли другие соображения, которые могут вызвать проблемы?

Ответы

Ответ 1

Остерегайтесь сторонних COM-библиотек или сторонних библиотек .NET, которые тайно делают вызовы win32. То, что у нас были самые большие головные боли.

Ответ 2

Из MSDN doco, среди прочих соображений:

Во многих случаях сборки будут работать одинаково в 32-разрядной или 64-разрядной среде CLR. Некоторые причины, по которым программа ведет себя по-разному при работе с 64-битной CLR, включают в себя:

  • Структуры, содержащие элементы, которые изменить размер в зависимости от платформы, таких как любой тип указателя.

  • Арифметика указателя, которая включает постоянные размеры.

  • Неправильная загрузка платформы или COM объявления, которые используют Int32 для вместо IntPtr.

  • Передача IntPtr в Int32

Кроме того, расположение файлов по умолчанию.

Ответ 3

В этой статье есть много хороших вопросов, о которых нужно знать: http://osnews.com/story/20330/Windows_x64_Watch_List

Лично мой босс имеет 64-битный компьютер Vista, и я программирую в 32-битном режиме. Мы столкнулись с следующими проблемами:

  • Реестр для 32-разрядных приложений скрывается (вроде) в папке Wow6432Node. Не все приложения, которые вы использовали для поиска пути в реестре, будут в том, что node (SQL Server, например, не будет).

  • SysWow64 в папке C:\Windows может привести к тому, что библиотеки DLL не будут там, где они нужны (у нас была эта проблема с сторонним компонентом лицензирования).

  • Иногда нужные вам файлы находятся в "C:\Program Files (x86)", а не "C:\Program Files". Отстой тоже.

Ответ 4

  • Чтение и запись на 64-битные значения не являются потокобезопасными на 32-битной платформе. Чтение 64-битного значения принимает две операции, которые могут быть прерваны коммутатором контекста. Для получения дополнительной информации см. Статью MSDN на Threading.Interlocked.Read.

  • Также полностью согласен с ответами torial !: -)

Ответ 5

MSDN опубликовала небольшую статью о проблемах переноса 32-разрядных приложений на 64-разрядную среду выполнения.

http://msdn.microsoft.com/en-us/library/ms973190.aspx

Два других блоггера ранее писали о 64-битной разработке, когда они работали в команде CLR

Ответ 6

x64 позволит вам адресовать больше памяти, но с учетом того же кода он будет использовать больше памяти, чем x86.

Ответ 7

По моему опыту перенос приложения Asp.NET был в основном безупречным. Запуск на 32-битной машине и на 64 бит, и никаких проблем не возникает, кроме наличия большего объема памяти. Это происходит потому, что многие проблемы, о которых уже упоминалось (реестр, потоки и т.д.), Управляются Asp.NET, и вам необходимо правильно их исправить для работы в среде Asp.NET.

Клиентская сторона (форма Windows) то же самое произошло, но если вы использовали некоторые "небезопасные" API для получения специальных папок или доступа к реестру, тогда может возникнуть какая-то проблема, как уже указывалось.

Отношения Massimo