J'ai écrit une petite procédure dans l'assemblage pour dessiner du texte à l'écran (d'abord il écrit dans un tampon, puis copiez le tampon à l'écran avec BitBlt) La fonction fonctionne bien, et dessine chaque 25ms, mais j'ai remarqué que l'utilisation de la mémoire augmente avec le temps, et augmente beaucoup. Tout d'abord, j'ai essayé de libérer le tampon DC, puis supprimer le bitmap, en créant un nouveau pour voir si la mémoire est sortie, mais cela n'a pas fonctionné, est-il possible de réduire cette utilisation de la mémoire?Utilisation de la mémoire pendant la procédure de dessin
voici mon code
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
mis à jour la fonction, mais toujours des fuites de mémoire (ajouté une fonction pour libérer le courant continu quand j'appelle la fonction updatescreen , aucun résultat) – user506998
Vous appelez la fonction 'GetDC()' deux fois dans initmenu. l'avez-vous sorti deux fois? – ruslik