Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли выгрузить из памяти 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(). Сильная вещь!


Наверх

Титульная страница Поиск, карта сайта Написать письмо