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

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

Утечка памяти в TOpenDialog? [D7, WinXP]


gosha73 ©   (2007-04-14 15:17:00) 

Привет друзья.
Что-то непонятное творится. Вроде все делаю как положено, а все равно вижу в диспетчере задач, что память неимоверно утекает с каждым кликом на кнопку. Привожу код клика:
procedure TForm1.BitBtn1Click(Sender: TObject);
var  FDlgOpen: TOpenDialog;
begin
 FDlgOpen := TOpenDialog.Create(nil);
 FDlgOpen.Title   := 'Open';
 if FDlgOpen.Execute then BitBtn1.Caption := FDlgOpen.FileName;
 FDlgOpen.Free;
end;


User Objects растет на 3,
GDI Objects растет на 9!!!

И вопрос. Что делать ? Где я не прав? :)


Amoeba   (2007-04-16 11:32:00) [1]

> gosha73   (15.04.07 14:27) [10]

> А подскажите пожалуйста названия верных приборов.

MemProof, например.


Yanis   (2007-04-16 07:38:00) [2]


> И не будет утечек, гарантированно.

Почему гарантированно? Из-за try... finally?
Интересно :)


Leonid Troyanovsky   (2007-04-15 18:37:00) [3]


> gosha73   (15.04.07 14:27) [10]

> А подскажите пожалуйста названия верных приборов.

Perfmon.exe

--
Regards, LVT.


gosha73   (2007-04-15 14:27:00) [4]

Оно уже понятно, что дело не в самой проге, а в системе и нее какое-то странноватое поведение, может зависит от мощнойстей железа или появление бага в обновленной дллке системы, иначе просто незнаю в чем причина.
А подскажите пожалуйста названия верных приборов.
Заранее благодарен.


Юрий Зотов   (2007-04-15 01:12:00) [5]

> gosha73   (14.04.07 15:17)  

with TOpenDialog.Create(nil) do
try
 Title   := 'Open';
 if Execute then
   BitBtn1.Caption := FileName;
finally
 Free
end;

И не будет утечек, гарантированно. А на показания неверных приборов - забейте.


_Аноним   (2007-04-14 23:27:00) [6]


> А зачем? Исключение-то он бы сразу заметил


На случай ,если оно возникнет


> gosha73


А ты не проверяй тему утечек ресурсов с помощью диспетчера задач, для этой цели существуют другие, правильные, способы


DrPass   (2007-04-14 21:16:00) [7]


> try-finally поставь, а?

А зачем? Исключение-то он бы сразу заметил.

> Что же может мешать проге очистить ресурсы???

Думаю, TOpenDialog представляет оболочку для стандартного виндового диалога из comdlg32.dll. А значит, и вопросы по очистке ресурсов - к соответствующей библиотеке


Desdechado   (2007-04-14 20:32:00) [8]

try-finally поставь, а?


gosha73   (2007-04-14 17:21:00) [9]

Забыл указать, что у меня лицензионная винда и обновляю сразу как выпускают обновление.


gosha73   (2007-04-14 17:19:00) [10]

Хм. Провел эксперимент на виртуальных машинах с этой же прогой.
1. Win2k русская версия - очищает сразу как надо.
2. WinXP SP2 MUI русская - очищает сразу как надо.

А на моей тачке WinXP SP2 Eng не очищает уже как в течении 15 минут.
Что же может мешать проге очистить ресурсы??? Бред какой-то.
У кого-нибудь есть идеи в чем может быть разница?
У меня никаких твикеров и ничего подобного на системе не стоит, классический вид и всё как обычно...


Чародей   (2007-04-14 16:32:00) [11]

Сколько добавляется GDI объектов столько и убавляется. так что либо твой софт либо ОС притормаживает с очисткой ресурсов


gosha73   (2007-04-14 15:34:00) [12]

Ну это все равно не нормально и не может быть чтобы никто на это не обратил внимание. Утечки не происходит если не вызывать FDlgOpen.Execute.
10 раз кликнуть и это уже 90 GDI объектов где-то просто так висят за моим процессом и это не есть хорошо.


DrPass   (2007-04-14 15:30:00) [13]


> User Objects растет на 3,
> GDI Objects растет на 9

Может, и есть утечка. Или в TOpenDialog, или в TBitBtn - можно посмотреть. Впрочем, чтобы эта утечка была как-то заметна для ОС, тебе потребуется тысяч двадцать раз по кнопке клацнуть...


Наверх

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