1)
之间有什么不同print(collectgarbage("count"))
和
print(system.getInfo( "textureMemoryUse" ))
2)我有一个游戏,你完成它之后,它会跳回到第一页,你可以再次播放它,我试着把纹理记忆使用它没有显示我的内存泄漏,但游戏成为每次我玩它都会更加滞后,除了内存泄漏之外还有其他任何原因会让它滞后吗?
3)删除对象的正确方法是什么?我尝试做的是:
object:removeSelf()
object = nil
但如果我使用collectgarbage(“count”)放弃它,它在使用之前和之后都没有显示任何不同。
每次玩游戏都比较困难我已经忍受了2天,真的找不到我的代码有什么问题,希望能在这里得到一些帮助。
这是关于删除所有内存的代码
--remove all the transition that store in a table
local k, v
for k,v in pairs(transitionTable) do
--print(k)
timer.cancel( v )
v = nil; k = nil
end
transitionTable = nil
transitionTable = {}
-- remove movie clip
playButtonAnim:removeSelf()
playButtonAnim = nil
-- remove displayGroup and it's child
displayGroup.x = display.contentHeight + 10
displayGroup.x = display.contentWidth + 10
if(displayGroup ~= nil and displayGroup.numChildren ~= nil) then
for i=1,displayGroup.numChildren do
print("child on display group : "..displayGroup.numChildren)
displayGroup:remove(1)
end
displayGroup:removeSelf()
end
我试着:
collectgarbage("collect")
print( "collectgarbage is " .. collectgarbage("count") )
在每一行上发现删除影片剪辑部分din释放任何内存,我认为这不是一种正确的删除方法吗?
答案 0 :(得分:1)
collectgarbage("count")
返回由Lua VM分配的内存量。 system.getInfo("textureMemoryUse")
返回分配的纹理内存量。
许多原因,包括代码中的sleep(number_of_replays)
。 ; - )
要从内存中完全删除对象,请在删除后再运行collectgarbage("collect")
几次(在某些情况下可能不够)。
话虽这么说,通常在每一帧上运行collectgarbage("step")
要好得多。 (您可能希望调整GC步骤并暂停。)
答案 1 :(得分:0)
要使用collectgarbage查看内存使用情况的变化,您需要在调用collectgarbage("collect")
之前运行collectgarbage("count")
答案 2 :(得分:0)
1)正如Alexander解释的那样,collectgarbage(“count”)是Lua虚拟机使用的内存,而system.getInfo(“textureMemoryUse”)是使用的纹理内存。换句话说,前者是Corona使用的主要内存,而后者是Corona在GPU上使用的内存量。
2)很多事情都可能导致滞后;我们需要了解的不仅仅是对问题的一般描述。也就是说,你所描述的症状是内存泄漏是我要寻找的第一件事。
3)这是正确的方法。请注意,该命令返回的数字可能会波动,并且内存使用情况在开始时不断增加是正常的,直到垃圾收集器最终赶上并且内存使用量下降。您不需要在单个行之后检查内存使用情况,而是在程序运行时观察内存使用情况。
对于调试,您可以将该命令放在enterFrame监听器中以持续监视内存使用情况,然后在完成后对该部分进行注释。
顺便说一句,在Corona论坛上,我发布了一个关于删除对象如何工作的非常详尽的解释: http://developer.anscamobile.com/forum/2011/01/14/how-do-i-tell-if-my-game-leaking#comment-16568
答案 3 :(得分:0)
有点晚但你永远不知道:
您忘记将displayGroup的引用设置为nil。 顺便说一句,如果你摧毁一个团体并且没有提及孩子,你就不必明确地摧毁孩子。
没有正确清洁显示对象会使电晕变慢,这很可能是造成滞后的原因。