如何修复pygame中的内存泄漏?
这段代码是基于Pygame备忘单上的代码(在这里)。
wht_pix = pygame.Color(0xff,0xff,0xff)
blu_pix = pygame.Color(0x00,0x00,0xff)
pixArr = pygame.PixelArray(self.surface)
for y in xrange(0,self.hgt):
for x in xrange(0,self.wid):
if self.grid[x][y]==1:
pixArr[x][y] = blu_pix
else:
pixArr[x][y] = wht_pix
del pixArr # this line doesn't seem to affect anything
pygame.display.update()
我能理解你为什么想要删除pixArr这个数组,因为它其实只是一个临时数组,用来处理表面缓冲区的像素。不过,我在我的程序中运行top
命令时发现,内存使用量慢慢在增加。去掉pixArr相关的代码块后,内存问题就解决了,所以这个问题肯定是在这段代码里。特别是去掉del PixArr
这一行后,程序的表现完全一样(内存使用量依然在增加),这就意味着即使包含了这一行,也并没有真正释放内存。
我的假设有什么问题呢? 我该如何修复内存泄漏?
1 个回答
1
正如我在评论中提到的,不要在主应用程序循环中不断创建和删除PixelArray
对象(在你的例子中没有显示)。有几种方法可以做到这一点,下面展示了一种简单的方法:
wht_pix = pygame.Color(0xff,0xff,0xff)
blu_pix = pygame.Color(0x00,0x00,0xff)
pixArr = None
while True: # main application loop
if pixArr is not None:
pixArr = pygame.PixelArray(self.surface)
for y in xrange(0,self.hgt):
for x in xrange(0,self.wid):
if self.grid[x][y]==1:
pixArr[x][y] = blu_pix
else:
pixArr[x][y] = wht_pix
for event in pygame.event.get():
# process all events
pygame.display.update()
if pixArr is not None:
del pixArr