![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли выгрузить из памяти dll и как?
Alexander © (2002-11-10 11:13:00)Загружаю её в память не я и мне достоверно известно, что она уже не используется. Она, конечно и сама через некоторое время выгрузиться, но мне нужно ускорить этот процесс (uninstall программы)
Alex44 (2002-11-10 19:33:00) [1]Windows cachiruet dll"s, i, v obshem, pravil"no delaet. IMHO, esli DLL ne zanyata ni kem drugim, to ona vygruzitsya, esli potrebovat" mnogo pamyati.
kig (2002-11-10 19:31:00) [2]Если используется XP, то можно попробывать
CoFreeUnusedLibrariesEx
Unloads any DLLs that are no longer in use and whose unload delay has expired.
void CoFreeUnusedLibrariesEx(
DWORD dwUnloadDelay, //The unload delay for DLLs no longer in use
DWORD dwReserved //Reserved for future use
);
Parameters
dwUnloadDelay
[in] The delay in milliseconds between the time that the DLL has stated it can be unloaded until it becomes a candidate to unload. Setting dwUnloadDelay=INFINITE uses the system default delay (10 minutes). Setting dwUnloadDelay=0 forces the unloading of any DLLs without any delay.
dwReserved
[in] Reserved for future use; must be zero.
Reindeer Moss Eater (2002-11-10 15:24:00) [3]Это лишь отменит отображение DLL в адресное пространство процесса, занятого циклическим выполнением FreeLibrary.
Если библиотека была загружена еще кем-то, то ничего реально не выгрузится.
Song (2002-11-10 15:07:00) [4]2Aleksey Pavlov © (10.11.02 14:39)
Можно сделать цикл постоянного исполнения FreeLibrary пока dll не будет вытащена.
Aleksey Pavlov (2002-11-10 14:39:00) [5]Забавно, господа, получается у вас.
Постановка задачи:
"Загружаю её в память не я и мне достоверно известно, что она уже не используется."
Можно сделать вывод, что счётчик ссылок обнулён и DLL находится в памяти только из-за "привычки" Windows ненадолго сохранять в памяти последнии загруженные физические образы DLL уже после обнуления ссылок на них.
Таким образом, попытка GetModuleHandle()+FreeLibrary() будет неудачной.
Насколько мне известно, документированных способов очистки физ. памяти из-под "обнулённой" DLL "вручную" не существует.
Система сама освободит память, когда потребуется.
Song (2002-11-10 14:16:00) [6]GetModuleHandle()+FreeLibrary()
Стыдно должно быть, товарищ, такие вопросы задавать! ;-)
Relict (2002-11-10 13:57:00) [7]а зачем её выгружать если она(dll) уже не используется
зразу смело удаляй
операционнка сама ее выгрузит как поступит команда на удаление
в чем проблемма то?
Reindeer Moss Eater (2002-11-10 12:23:00) [8]Не поможет, хоть и сильная вешь.
Наезжалкин (2002-11-10 11:54:00) [9]Попробуйте FreeLibrary(). Сильная вещь!