绘图过程中的内存使用情况

时间:2010-11-13 21:46:01

标签: windows assembly drawing gdi 32-bit

我在程序集中编写了一个小程序来向屏幕绘制一些文本(首先它写入缓冲区,然后使用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 

2 个答案:

答案 0 :(得分:1)

你必须释放DC。您可能没有正确执行(在您提供的代码中,DC的值在BitBlt返回时丢失)。

您能估计每次迭代泄漏的内存量吗?

答案 1 :(得分:1)

解决了问题,而不是ReleaseDC我应该使用DeleteDC,MSDN上的信息是错误的......