我一直在用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的速度爬升内存。 直到我发现那不是问题所在之前,我的引擎一直处于独立状态。同步运行仍然泄漏。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐