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

StackOverflow https://stackoverflow.com/questions/145026

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

Из Документация MSDN, среди прочих соображений:

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

  • Контроки, которые содержат участники, которые изменяют размер в зависимости от платформы, например, любой тип указателя.

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

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

  • Приведение IntPtr к Int32

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

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

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

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

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

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

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

  • Также полностью согласен с учебник's ответы! :-)

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 для получения специальных папок или доступа к реестру, то, как уже указывалось, может возникнуть некоторая проблема.

С уважением Массимо

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top