Pymunk内存泄漏和/或挂起

时间:2013-07-31 11:26:38

标签: python memory-leaks pymunk

我一直在用Python编写游戏,需要能够从物理引擎中添加和删除大量对象。在极端测试场景中,我的内存耗尽是秒。在正常情况下,积累需要一段时间。经过两天的工作,我发现了一个小测试场景,显示了发生了什么。我的平台是Windows 7 64x。

import pymunk
import time
from os import system
space=pymunk.Space()
width=5
height=5
poly=[(-width/2.0,-height/2.0),(-width/2.0,height/2.0),(width/2.0,height/2.0),(width/2.0,-height/2.0)]
while(True):
    #time.sleep(.5) #
    system("pause")
    bodys=[pymunk.Body(mass=5,moment=pymunk.moment_for_poly(5, poly)) for a in range(200)] #num of objects here
    print "1"
    shapes=[pymunk.Poly(bod, poly) for bod in bodys]
    print "2"
    space.add(bodys)
    print "3"
    space.add(shapes)
    print "4"
    space.step(.5) #step has no effect on leak
    print "5"
    space.remove(space.bodies)
    print "6"
    space.remove(space.shapes)
    print "7"
    #space.remove(shapes)
    #print "6"
    #space.remove(bodys)
    #print "7"

所以,如果你只是玩一下。曾经有一段时间没有挂起,会爬出记忆。但目前它在删除形状方面很重要。形状移除都不会做任何事情。我的游戏永远不会只是狼吞虎咽的记忆。

在每循环200次测试时,它将从50mb开始“跳跃”50 mbs,并以300mb左右结束(对我而言)。 我以为我可能只是在运行垃圾收集器,但是大量的对象进出内存只是出血记忆,即使只是一次。我让程序运行而不添加或删除对象。没有记忆被回收。

每个循环添加和删除一个对象都没有泄漏,并且在非常低且恒定的内存上运行。

我发现pymunk不会泄漏的情况,但应用该方法无法解决问题。 (较慢的添加和删除或不使用添加(列表)和删除(列表)。)Pymunk本身一个对象不会泄漏。我的游戏中一次有一个对象是。

我已经尝试过我的darnedest找到任何迷路参考或参考周期。此示例显示没有太多复杂的引用,并且有内存回收问题。

任何意见都会受到赞赏?

其他信息: 每帧以60 fps的速度添加和删除1个对象,以每秒3 mbs的速度爬升内存。 我的引擎是在一个单独的线程,直到我发现这不是问题。同步运行仍然泄露。

0 个答案:

没有答案