У меня есть небольшое тестовое решение с одним exe и тремя Dlls, exe вызывает три Dll по одному.Я установил для Build-> Advanced-> DLL Base Address значение 0x41000000, 0x42000000 и 0x43000000 для Dll1.dll, Dll2.dll и Dll3.dll соответственно.Я запустил
ngen install ConsoleApplication1.exe
, и это успешно ngen'd приложение вместе с тремя Dll.Я не очень хотел ngen exe, но пока это единственный способ получить какие-либо результаты вообще.
Во время выполнения я использую VMMap для мониторинга виртуального адресного пространства, и это показывает, что ngen'dОболочки находятся в постоянном диапазоне виртуальной памяти, однако они все еще прыгают в этом диапазоне, загружаясь по слегка отличающемуся адресу каждый раз, когда я запускаю их.VMMap обнаруживает, что по адресам, где я пытаюсь загрузить изображения, ничего не выделяется, поэтому это скачкообразное поведение не вызвано конфликтами адресов.
Я веду журналы:
Dll1 Dll2 Dll3
0x40140000 0x411D0000 0x42810000
0x40580000 0x41EB0000 0x426B0000
0x40190000 0x41FB0000 0x42380000
0x40F30000 0x41FD0000 0x42050000
0x409B0000 0x41BF0000 0x42910000
0x408E0000 0x41860000 0x42050000
0x40B50000 0x41280000 0x42A80000
Обратите внимание, что первые две цифры адреса остаются неизменными для всех трех DLL-файлов во всех прогонах.
Мой актуальный вопрос: является ли это показателем успеха?Я немного сбит с толку, потому что я думал, что Dlls будут сидеть точно в 0x41000000, 0x42000000 и 0x43000000.Результаты показывают, что они висят вокруг этой области, но никогда не сидят там, где я их просил.Насколько я понимаю, вы хотите, чтобы Dll загружались именно по адресу, который вы их просили, чтобы им не пришлось проходить дорогостоящую операцию перебазирования (которая очень очень дорогая, когда ваши Dll были ngen«d).Но разве это не то, что происходит?Конечно, мои Dll торчат в определенной области, но они не сидят точно там, где я их просил, так что, конечно, дорогостоящая операция перебазировки выполняется каждый раз?Это именно то, чего я хотел избежать.
Примечание: меня не интересуют аргументы за / против перебазирования и ngen.Я просто хочу знать, что происходит и как заставить это работать.
Ура ТАК!