RSS

Uważaj na wycieki obiektów graficznych

Liczba odsłon: 19

Twój program działający pod kontrolą Windows nagle przestaje rysować tekst pozycji menu albo zawartość okien dialogowych? Prawdopodobnie masz gdzieś wyciek obiektów graficznych, takich jak HDC, HBRUSH czy HPEN. Śledzenie ich wykorzystania nie jest proste, szczególnie, gdy podprogramy rysujące mają więcej niż kilkadziesiąt wierszy kodu.

Problem niekontrolowanego wykorzystania zasobów modułów GDI i User systemu Windows bardzo ładnie obrazuje różnicę klas między rodzinami systemów Windows 95 i NT. W przypadku systemu Windows 95 (i pochodnych), pula zasobów systemowych jest wspólna dla wszystkich procesów i jedna aplikacja nie sprzątająca po sobie może zawiesić cały komputer w ciągu kilku sekund. Na ten błąd typu DoS nie ma żadnej rady: tak działało Windows 1.0, tak musi działać i Windows Me. Kompatybilność...

Dla odmiany, taki sam błąd w Windows NT i pochodnych wpływa wyłącznie na problematyczną aplikację. Wszystkie sterty zasobów tworzone są per-proces, wyczerpują się tylko nadużywającemu ich procesowi i zwalniane są automatycznie w momencie zamykania (czy to awaryjnego, czy planowego) tego procesu. Nie oznacza to oczywiście, że program nie powinien sprzątać po sobie — jednak ewentualne błędy nie mają tak katastrofalnych, a na pewno tak globalnych konsekwencji.