Это 32-разрядное приложение ASP.NET, работающее в 64-разрядной версии Windows. LARGEADDRESSAWARE
-
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-разрядными приложениями.