Это продолжение этого вопроса .
Я нахожусь в процессе тестирования, предоставит ли мне перебазирование DLL-файлов .NET и даст мне больше общего кода в памяти на терминальных серверах.
Однако у моего плана, похоже, есть недостаток, и я не могу найти работающий метод для определения рабочего набора адресов.
Я думал, что мог сделать следующее:
- Просто собери и НГЕН все
- Запустите программу, убедившись, что все библиотеки DLL были загружены
- Используйте LISTDLLS / R PROGRAMNAME, чтобы получить список текущих используемых адресов для работающего экземпляра
- Используйте адреса тех библиотек DLL, которые были переназначены в качестве нового базового адреса для этих DLL
- UN-NGEN все, и начните с 1
Однако, это превратилось в Schrödinger упражнение, потому что действие по перебазированию некоторых DLL, очевидно, либо меняет порядок загрузки, либо как операционная система перемещает другие DLL.
Например, допустим, что после первоначального запуска у меня есть список, в котором говорится, что библиотеки A, B и C должны находиться по адресам 1000, 2000 и 3000. Там нет упоминаний о библиотеках D, E и F, которые также часть той же системы. Предположительно они были загружены в их текущем базовом адресе, иначе я бы предположил, что LISTDLLS расскажет мне об этом.
Итак, я меняю адрес A, B, C, повторяю все, и теперь DLL C, D и E были перемещены. A и B теперь в порядке, E и F теперь перемещены, а C все еще перемешивается.
Я понимаю, что это упражнение несколько бесполезно, поскольку независимо от того, что я выяснил на моей машине, библиотеки DLL, используемые и внедряемые на целевом терминальном сервере, могут испортить эту картину, но я подумал, что если я хотя бы смог убедиться, некоторые библиотеки DLL могут быть расположены по их предписанному базовому адресу, тогда объем общего кода между несколькими экземплярами одной и той же программы увеличится. Просто говорю, просто чтобы не было необходимости «напоминать» мне об этом:)
Поскольку исходные базовые адреса всех наших DLL были по умолчанию, что означало, что каждая DLL (возможно, кроме первой загруженной) была перемещена и, таким образом, отображена в файл подкачки, я думаю, что потенциальный выигрыш выше 0.
Любой совет?