![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Утечка памяти в 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 - можно посмотреть. Впрочем, чтобы эта утечка была как-то заметна для ОС, тебе потребуется тысяч двадцать раз по кнопке клацнуть...