Мне нужно очень часто создавать изображения HBITMAP в программе на C ++, и, конечно, мне нужно удалять эти растровые изображения после использования.
Код похож на этот
HBITMAP hBmp;
while(true) {
hBmp = CreateBitmap(width, height, 1, 8, imageData);
process(hBmp);
DeleteObject(hBmp);
}
У меня есть бесконечный цикл в потоке, который непрерывно создает HBITMAP, вызывает функцию, использующую это растровое изображение, а затем удаляет ее. При запуске цикла я проверяю, больше ли используется память процесса, чем в предыдущем цикле, и если это так, я печатаю его.
Использование CreateBitmap () и DeleteObject () приводит к небольшой утечке памяти; время от времени использование памяти процесса увеличивается на 4 КБ (иногда каждые 10 секунд, иногда ничего не происходит в течение минут).
Я также проверил его, не вызывая функцию процесса, и проблема все еще существует, так что я думаю, что это связано с обработкой растрового изображения.
Кроме того, я провел еще один тест, создавая изображение вне бесконечного цикла (поэтому я создаю его только один раз) и обрабатывая его в бесконечном цикле, и утечки памяти не происходит.
ПРИМЕЧАНИЕ. DeleteObject () всегда возвращает значение> 0 (без ошибок).
Возможно ли, что проблема связана с функцией DeleteObject ()? Что-то не так в создании / удалении растрового изображения таким образом?
ТЕХНИЧЕСКИЕ ПРИМЕЧАНИЯ:
Windows XP
Borland C ++ Builder 5