Это 32-разрядное приложение ASP.NET, работающее в 64-разрядной версии Windows. LARGEADDRESSAWARE

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

  •  12-09-2019
  •  | 
  •  

Вопрос

У меня есть 32-разрядное приложение ASP.NET, в котором используются 32-разрядные неуправляемые библиотеки DLL.

Если я запущу это в 64-битной ОС, будет ли оно автоматически LARGEADDRESSAWARE (т.е.иметь доступ ко всем 4 ГБ виртуальной памяти)?

Если нет, что я могу сделать, чтобы сделать его LARGEADDRESSAWARE?

Погуглив нашелся этот вопрос, но в нем нет ответа на поставленный выше вопрос.

РЕДАКТИРОВАТЬ

Этот блог предполагает, что рабочий процесс ASP.NET 1.1 является LARGEADDRESSAWARE, но ничего не говорит об ASP.NET 2.0:

Если система загружается с помощью коммутатора /3GB в boot.ini (поддерживается только на предприятиях и изданиях центров обработки данных Windows 2000, и все версии Windows XP и Windows Server 2003) процесс, который связан с коммутатором /largeaddressaware. Смотрите «3 ГБ.ASPNET_WP.EXE связана таким образом в версии 1.1 и может воспользоваться этим.

РЕДАКТИРОВАТЬ 2

Это другой блог это предполагает, что 32-битные приложения ASP.NET являются LARGEADDRESSAWARE, но не упоминается версия ASP.NET:

Мы обнаружили, что компоненты, которые были размещены в рамках ASP.NET

Должен сказать, я поражен отсутствием авторитетной опубликованной информации по этому вопросу.

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

Решение

Мне удалось получить доступ к серверу под управлением Windows 2003 SP2, и ответ, похоже, да, 32-битные приложения ASP.NET являются LARGEADDRESSAWARE и имеют доступ ко всем 4 ГБ виртуальной памяти.

Я установил это следующим образом:

  • проверка w3wp.exe (32-разрядного рабочего процесса IIS) с использованием «dumpbin/headers».Это показывает, что бит LARGEADDRESSAWARE установлен.

  • запуск 32-разрядного приложения ASP.NET, которое пытается выделить более 2 ГБ виртуальной памяти:это было успешно.

Я предполагаю, что результат будет таким же для Windows 2008/IIS7, но я его не проверял.

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

Нет, не будет.Чтобы обеспечить поддержку больших адресов, вам необходимо запустить IIS как 64-разрядное приложение (не работающее с использованием WOW).Это означает, что ваши 32-битные неуправляемые библиотеки DLL придется заменить их 64-битными версиями.

Обычно asp.net преобразуется в 64-разрядное приложение при выборе параметра компилятора для целевой любой платформы (это значение по умолчанию).Проблема с вашим 32-битным приложением заключается в том, что существуют неуправляемые 32-битные библиотеки DLL.Они не могут работать в 64-битном приложении.Это означает, что вам необходимо запускать приложение ASP.NET как 32-разрядное приложение, а это означает, что вам необходимо установить 32-разрядную версию IIS на свой 64-разрядный сервер.Единственный способ избежать этого — заменить 32-битные неуправляемые библиотеки DLL на те, которые предназначены для работы в 64-битной среде.32-битное приложение не может использовать всю память на 64-битном сервере, поэтому ваше приложение не сможет «видеть» дополнительную память.

Приложения ASP.NET будут перекомпилировать себя (при условии, что во время компиляции задан любой параметр целевой среды) в 64-разрядной среде, поэтому они больше не являются 32-разрядными приложениями.

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