【发布时间】:2014-07-13 18:06:00
【问题描述】:
此代码 sn-p 基于 Pygame Cheat Sheet (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 行似乎使程序的行为方式完全相同(内存消耗增加),这在某种程度上暗示它在包含时并没有真正释放内存。
我的假设有什么问题? 如何修复内存泄漏?
【问题讨论】:
-
重复:stackoverflow.com/questions/7866940/python-memory-leak - 这是(是?)
PixelArray中的错误。所以不幸的是,目前的答案是不要使用PixelArray。 -
这是一个可怕的答案,但我担心它可能是正确的。
-
该答案的交叉帖子:“我在 Python 3.4.0 上并使用 PyGame 1.9.2a0,运行它不会给我带来泄漏。”
-
请注意,
del pixArr不会释放pixArr。它只会删除该引用(这可能触发解除分配)。在该代码中,它什么也不做。如果deallocation有问题是pygame的C代码中的一个程序,那么你就无能为力了。
标签: python memory-leaks pygame pygame-surface