此代码段基于Pygame备忘单(here)中的代码。
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
行似乎使程序的行为方式完全相同(内存消耗增长),这意味着它在包含内存时并没有真正释放内存。
我的假设出了什么问题? 如何修复内存泄漏?
答案 0 :(得分: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