Как заставить мою программу использовать меньше памяти при сборке с пакетами времени выполнения? - PullRequest
2 голосов
/ 07 ноября 2010

Я всегда компилирую свои приложения delphi без «сборки с помощью пакетов времени исполнения», но для моего последнего проекта мне пришлось использовать его (так как он начал набирать обороты изо дня в день).Я использую некоторый сторонний VCL (пакет компонентов TMS с исходным кодом, каталог исходного кода также находится в пути поиска),

, когда я компилирую со сборкой с пакетами времени выполнения, весь пакет bpl используется приложением во время выполнения (в противном случае этосоответствует только необходимые vcls внутри пакета в приложение), так что я думаю, что он потребляет много оперативной памяти (обычно мое приложение использует оперативной памяти 38 МБ, но теперь 62 МБ (не только tms, я также использовал много других vcl) в соответствии с диспетчером задач Windows).

Есть ли способы заставить мое приложение потреблять мало памяти, как если бы оно было скомпилировано как отдельный exe.

(я знаю, что перекомпилирую пакеты VCL только с необходимым vcl (у меня есть источник)но это слишком сложно для поиска исходного кода и поиска необходимых программ vcls и sub)

Ответы [ 2 ]

8 голосов
/ 07 ноября 2010

Я думаю, что вы измеряете не то.Хотя пакет files больше, это не обязательно означает, что ваша программа занимает больше места в оперативной памяти.Компилятор должен включать код для всех функций и модулей в пакете, независимо от того, какие части использует данная программа, но это не означает, что весь этот код загружается в память.ОС загрузит страниц , в которых она нуждается;остальное будет по-прежнему находиться на диске, в файле BPL, откуда он был полученВесь файл BPL будет занимать адресное пространство , но он не будет загружен в физическое ОЗУ, поэтому не о чем беспокоиться, если вы действительно не рискуете использовать все 2 ГБ адресного пространства.ОС предоставляет ваш процесс.

0 голосов
/ 07 ноября 2010

Пакеты - это библиотеки DLL, их нужно загружать в память для работы. И каждый пакет будет содержать код для всех модулей, из которых он построен. Таким образом, они могут использовать больше памяти, чем исполняемые файлы exeyt во время выполнения, хотя ваше увеличение выглядит слишком большим. С другой стороны, если больше чем ваше приложение использует те же пакеты и они установлены правильно, их код будет загружен один раз в память. Вы можете создавать специальные пакеты, но вы должны быть очень осторожны, чтобы использовать другие имена, отличные от стандартных, или вы можете сломать некоторые другие приложения, особенно если вы помещаете свои пакеты в общую папку или в каталог, который стоит первым в пути , Прежде чем попробовать их, я проверю, что ваше приложение не связывает неиспользуемые пакеты. Delphi добавит в опции более или менее все пакеты, которые он знает. После компиляции вы можете проверить, какие пакеты действительно используются, и добавить их только в список используемых пакетов.

...