UniGUI и 64 битные приложения

В данной статье посмотрим как работать с 64 битными приложениями Delphi UniGUI. Зачем это нужно? Все очень просто. Для каждого пользователя в UniGui открывается отдельная сессия (копия программы). Скажем копия программы занимает в определенный момент времени 3 мб. памяти. И вот вопрос — сколько пользователей смогут работать одновременно, используя по 3 мб оперативной памяти? Ответ на этот вопрос очень прост — нужно разделить объем оперативной памяти на 3 мб. Но здесь встает вопрос о битности.

Скажем, у нас 32 битное приложение. Если мы откроем документацию, мы увидим такую картину

Иными словами мы сможем открыть 2*1024/3 = 682 копии. Но и это не соответствует действительности, на практике доступно порядка 1 GB, после чего приложение отказывает с ошибкой «Out of memory».

То есть, по факту для 32 битного приложения нам будет доступно 1024/3 = 341,3 копии, после чего произойдет переполнение памяти.

Что делать в этом случае? Ответ — использовать 64 битные приложения. И тогда ограничение на объем оперативной памяти практически снижается. Вот что написано в документации Delphi по этому поводу.

16 Эксабайт это 16*10^18 байт, то есть в теории, нам будет доступно 16*10^18 / (3*1024) ~ 5,2 *10^15 степени копий программы, думаю этого более чем достаточно для большинства задач. Но это в теории, а на практике, насколько я понимаю, после достижения максимума физической оперативной памяти задействуется файл подкачки, так что возможности ограничены жестким диском.

Теперь немного поэкспериментируем. Если выполнить инструкцию

то для 32 битного приложения где-то в районе 1 GB можно получить «Out of Memory», а для 64 битного можно преодолеть барьер и в 4 GB (у меня физической оперативной памяти на момент теста было 4 GB).

В Delphi XE8 и др. версий, чтобы сделать 64 битное приложение, нужно зайти в Project Manager, нажать правой кнопкой на Target Platform и добавить Windows 64. И далее скомпилировать приложение таким образом.

Единственное, чтобы запускать приложение под IIS нужно самой IIS указать, что запускаемая dll будет 64 битной. Для этого можно посмотреть инструкцию по настройке IIS и на шаге для включения 32 битных приложений отключить их поддержку, то есть так…

Программа, с помощью которой можно наблюдать за памятью это Process Explorer. Её можно скачать с официального сайта Microsoft.