1

此代码片段基于 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行似乎使程序以完全相同的方式运行(内存消耗增加),这在某种程度上暗示它在包含时并没有真正释放内存。

我的假设有什么问题?如何修复内存泄漏?

4

1 回答 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
于 2014-07-13T20:56:14.990 回答