我在程序集中编写了一个小程序来向屏幕绘制一些文本(首先它写入缓冲区,然后使用BitBlt将缓冲区复制到屏幕) 该功能运行良好,每25ms绘制一次,但我注意到内存使用量随着时间的推移而增加,并且增加了很多。 首先,我尝试释放缓冲区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
答案 0 :(得分:1)
你必须释放DC。您可能没有正确执行(在您提供的代码中,DC的值在BitBlt返回时丢失)。
您能估计每次迭代泄漏的内存量吗?
答案 1 :(得分:1)
解决了问题,而不是ReleaseDC我应该使用DeleteDC,MSDN上的信息是错误的......