Ответ 1
Остерегайтесь сторонних COM-библиотек или сторонних библиотек .NET, которые тайно делают вызовы win32. То, что у нас были самые большие головные боли.
Я считаю, что тип архитектуры (x86 vs x64) абстрагируется для вас при создании .Net-программ, но есть ли другие соображения, которые могут вызвать проблемы?
Остерегайтесь сторонних COM-библиотек или сторонних библиотек .NET, которые тайно делают вызовы win32. То, что у нас были самые большие головные боли.
Из MSDN doco, среди прочих соображений:
Во многих случаях сборки будут работать одинаково в 32-разрядной или 64-разрядной среде CLR. Некоторые причины, по которым программа ведет себя по-разному при работе с 64-битной CLR, включают в себя:
Структуры, содержащие элементы, которые изменить размер в зависимости от платформы, таких как любой тип указателя.
Арифметика указателя, которая включает постоянные размеры.
Неправильная загрузка платформы или COM объявления, которые используют Int32 для вместо IntPtr.
Передача IntPtr в Int32
Кроме того, расположение файлов по умолчанию.
В этой статье есть много хороших вопросов, о которых нужно знать: 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". Отстой тоже.
Чтение и запись на 64-битные значения не являются потокобезопасными на 32-битной платформе. Чтение 64-битного значения принимает две операции, которые могут быть прерваны коммутатором контекста. Для получения дополнительной информации см. Статью MSDN на Threading.Interlocked.Read.
Также полностью согласен с ответами torial !: -)
MSDN опубликовала небольшую статью о проблемах переноса 32-разрядных приложений на 64-разрядную среду выполнения.
http://msdn.microsoft.com/en-us/library/ms973190.aspx
Два других блоггера ранее писали о 64-битной разработке, когда они работали в команде CLR
x64 позволит вам адресовать больше памяти, но с учетом того же кода он будет использовать больше памяти, чем x86.
По моему опыту перенос приложения Asp.NET был в основном безупречным. Запуск на 32-битной машине и на 64 бит, и никаких проблем не возникает, кроме наличия большего объема памяти. Это происходит потому, что многие проблемы, о которых уже упоминалось (реестр, потоки и т.д.), Управляются Asp.NET, и вам необходимо правильно их исправить для работы в среде Asp.NET.
Клиентская сторона (форма Windows) то же самое произошло, но если вы использовали некоторые "небезопасные" API для получения специальных папок или доступа к реестру, тогда может возникнуть какая-то проблема, как уже указывалось.
Отношения Massimo