![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Утечка памяти при загрузке DLL [D7, Win2k, WinXP]
bjohny © (2004-08-26 13:26:00)Привет. Проблема в следующем.
Создаю пустую DLL, определяю и экспортирую пустую процедуру.
В проекте DLL загружается динамически. Послу загрузки сразу же выгружаю.
LoadLibrary(...);
FreeLibrary(...);
MemProof говорит что утечки нет, но Task Manager показывает утечку.Если запустить в цикле загрузку/выгрузку на несколько часов, то кушается вся память.
Подскажите почему растет память????
Digitman (2004-08-27 11:37:00) [1]
> bjohny (27.08.04 10:59) [19]
> ну так глянь
даже и глядеть нечего
bjohny (2004-08-27 10:59:00) [2]ну так глянь
Digitman (2004-08-27 10:42:00) [3]
> bjohny (27.08.04 10:30) [17]
> Суть то остается одной...
да, суть остается одной - не верю чтобы "пустая" ДЛЛ вызывала проблемы с утечками памяти
bjohny (2004-08-27 10:30:00) [4]Суть то остается одной...
Digitman (2004-08-27 10:18:00) [5]
> bjohny (27.08.04 09:46) [15]
> Реально DLL использует WMIScripting, который в свою очередь
> использует OLE
вот и приводи РЕАЛЬНЫЙ код, а не абстрактный пример
bjohny (2004-08-27 09:46:00) [6]Реально DLL использует WMIScripting, который в свою очередь использует OLE. Память течет по страшному. Убрать WMI??? Это не выход...
Игорь Шевченко (2004-08-26 17:59:00) [7]
> Меня интересует как от этого избавиться
Сказали уже - убрать Forms.
bjohny (2004-08-26 15:49:00) [8]НУ хорошо, эт в общем.
Возьмем OLE, там тоже дует будь здоров.
Меня интересует как от этого избавиться, пусть хоть мильон действий производится.
Игорь Шевченко (2004-08-26 15:46:00) [9]А зачем грузить такую DLL ?
При инициализации forms очень много действий производится...
bjohny (2004-08-26 15:05:00) [10]В бесконечном цикле такая же беда.
clickmaker (2004-08-26 14:54:00) [11]
> [8] bjohny (26.08.04 14:41)
а если без таймера, просто в бесконечном цикле?
DVM (2004-08-26 14:52:00) [12]
> а вот если Classes или Forms то ... утечка...
Ну вот и ответ. Там искать надо.
bjohny (2004-08-26 14:41:00) [13]Ну и что.... убрал все равно...
VMcL (2004-08-26 14:38:00) [14]> Application.ProcessMessages;
Убрать.
bjohny (2004-08-26 14:38:00) [15]Если оставить SysUtils, то все нормально, а вот если Classes или Forms то ... утечка...
DVM (2004-08-26 14:20:00) [16]А если убрать
uses
SysUtils,
Forms,
Classes;
ситуация не меняется?
bjohny (2004-08-26 14:02:00) [17]Dll:
library Test;
uses
SysUtils,
Forms,
Classes;
{$R *.res}
procedure tt;
begin
//
end;
exports
tt;
begin
end.
Проект:
// Timer.Interval:=10;
procedure TForm1.Timer1Timer(Sender: TObject);
var DllH:HWND;
begin
DllH:=LoadLibrary('Test');
FreeLibrary(DllH);
Application.ProcessMessages;
end;
DVM (2004-08-26 13:46:00) [18]
> если бы винда не говорила что You virtual memory is LOW
код давай...
bjohny (2004-08-26 13:39:00) [19]Я бы ему не верил, если бы винда не говорила что You virtual memory is LOW
DVM (2004-08-26 13:35:00) [20]
> но Task Manager показывает утечку
Не верь таскменеджеру. Верь MemProofу. Еще можно ProcessExplorer-у.