Я написал небольшую процедуру в сборке, чтобы нарисовать текст на экране (сначала он записывает в буфер, а затем копирует буфер на экран с помощью BitBlt) Функция работает хорошо, и она рисует каждый 25 мс, но я заметил, что использование памяти увеличивается со временем и значительно увеличивается. Во-первых, я попытался освободить буфер DC, а затем удалить растровое изображение, создав новый, чтобы узнать, освобождена ли память, но она не работает, есть ли способ уменьшить это использование памяти?Использование памяти во время процедуры рисования
вот мой код
backh dd 0
bmph dd 0
isless db 1
zerod dd 0
initmenu:
invoke GetDC,0
invoke CreateCompatibleDC,eax
mov [backh],eax
invoke GetDC,0
invoke CreateCompatibleBitmap,eax,140,250
mov [bmph],eax
invoke SelectObject,[backh],[bmph]
invoke SetBkMode,[backh],TRANSPARENT
invoke SetTextColor,[backh],33CC00h
retn
updatescreen:
invoke GetDC,0
mov [zerod],eax
mov cl,[isless]
test cl,cl
jnz @f
invoke BitBlt,[zerod],0,0,140,250,[backh],0,0,SRCCOPY
jmp _updatescreenend
@@:
invoke BitBlt,[zerod],0,0,140,25,[backh],0,0,SRCCOPY
_updatescreenend:
invoke ReleaseDC,[zerod]
retn
menuproc:
invoke Sleep,25
call updatemenu
jmp menuproc
обновила функцию, но до сих пор просачивается память (добавлена функция для освобождения постоянного тока, когда я вызвать функцию updatescreen , нет результатов) – user506998
Вы вызываете функцию GetDC() 'дважды в initmenu. вы выпустили его дважды? – ruslik