Использование памяти во время процедуры рисования - PullRequest
0 голосов
/ 14 ноября 2010

Я написал небольшую процедуру в ассемблере, чтобы нарисовать некоторый текст на экране (сначала он записывает в буфер, затем копирует буфер на экран с помощью 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 

Ответы [ 2 ]

1 голос
/ 14 ноября 2010

Решил проблему, вместо ReleaseDC я должен использовать DeleteDC, информация на MSDN неверна ...

1 голос
/ 14 ноября 2010

Вы должны освободить DC.Возможно, вы сделали это неправильно (в представленном вами коде значение DC теряется к моменту возврата BitBlt).

Можете ли вы оценить, сколько памяти вы теряете за итерацию?

...