Pymunk内存泄漏和/或挂起

2024-09-22 14:36:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在用Python编写一个游戏,它需要能够从物理引擎中添加和删除很多对象。在极端的测试场景中,我可以用掉的内存是秒。在正常情况下,它需要一段时间来积累。经过两天的工作,我发现了一个小的测试场景,它准确地显示了正在发生的事情。我的平台是Windows764X

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个循环时,它将“跳转”50mbs,从50mb开始,到300mb左右结束(对我来说)。 我想我可能只是在运行垃圾收集器,但大量的对象进出只是在内存中,即使只有一次。我让程序运行而不添加或删除对象。没有回收内存。你知道吗

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

我发现pymunk不会泄漏,但应用该方法无法修复任何问题。(较慢的添加和删除或不使用添加(列表)和删除(列表)。)Pymunk本身一个对象不会泄漏。在我的游戏中一次只有一个物体。你知道吗

我已经尽我最大的努力去寻找任何错误的参考或参考周期。这个例子显示没有太多复杂的引用,并且有内存回收问题。你知道吗

如有任何意见,我们将不胜感激?你知道吗

其他信息: 以每秒60帧的速度添加和删除每帧1个对象会以每秒3 MB的速度爬升内存。 直到我发现那不是问题所在之前,我的引擎一直处于独立状态。同步运行仍然泄漏。你知道吗


Tags: 对象内存引擎import游戏forspacewidth