Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Вниз

Катастрофическое уплывание ресурсов   Найти похожие ветки 

 
valery_f   (2001-12-26 15:03) [0]

После создания (через API) и пользования GDI объектов удаляю их через DeleteObject. Все хорошо, но в некоторых случаях (особенно если частые перерисовки) GDI ресурсы резко начинают уплывать вплоть до нуля, причем после закрытия программы они не восстанавливаются - только перезагрузка. Впервые я заметил это на метафайлах, потом оказалось - с Pen/Brush иногда бывает то же самое. Такое чувство, что DeleteObject на самом деле ничего не удалило... :((( Что это?


 
Юрий Зотов   (2001-12-26 15:55) [1]

Вот ремарка из описания DelectObject.

Remarks

Do not delete a drawing object (pen or brush) while it is still selected into a device context.
When a pattern brush is deleted, the bitmap associated with the brush is not deleted. The bitmap must be deleted independently.

То есть - проверьте, как у Вас используется SelectObject и не назначаются ли битмапы для кистей.


 
Юрий Зотов   (2001-12-26 16:09) [2]

Дополнение.

Попробуйте везде заменить вызов DelectObject на такой:
Win32Check(DelectObject(...));

Тогда, по идее, если DelectObject вернет False, то будет автоматически вызвана GetLastError и сгенерено исключение с системным сообщением. Это может помочь в диагностике.



 
Mirovodin   (2001-12-26 16:21) [3]

Используй отладчик Mem proff http://www.automatedqa.com/ или BoundsChecker http://www.numega.com Очень помогают отследить утечки ресурсов, причем Mem proff прямо дает дельные советы по их устранению.


 
valery_f   (2001-12-26 17:24) [4]

Спасибо, насчет "selected into DC" я как то не подумал :) Ну, насчет кистей и пр. я понял. А как быть с метафайлами? Вот кусок кода, который, будучи прокручен несколько сотен раз (просмотр файлов перед импортом) опускает GDI ресурсы до нуля:

hMetafile := GetEnhMetaFile(PChar(Filename));
if hMetafile = 0 then ..
try
GetEnhMetaFileHeader(hMetafile,SizeOf(TEnhMetaHeader),@EMF);
...
PlayEnhMetaFile(Bmp.Canvas.Handle,hMetafile,r);
finally
DeleteEnhMetaFile(hMetafile);
end;

Может во время "PlayEnhMetaFile" винда создает еще какие-то объекты и с ними надо что-то делать?



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
3-79275
vopros
2002-01-31 10:30
2002.02.25
При групперовке в QReport сумму в GroupFooter выдает не верную...


3-79303
kam_nal
2002-01-30 14:16
2002.02.25
трабл при добавлении записей в БД


4-79512
Andrey80
2001-12-27 00:07
2002.02.25
Подскажите как вставить иконку нестандартного размера.


1-79371
Aleksandr
2002-02-08 19:23
2002.02.25
Как из программы узнать формат строки с датой/временем для SQL-сервера


14-79451
Lex
2002-01-08 18:45
2002.02.25
Почему у меня не работает функция valueexists?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский