2011-09-07 86 views
2

我基本上有一个对象,我称之为两个函数和三个函数。奇怪的内存行为

function func1() 
    M.mfunc1('updateSomething'); 
    // do some stuff 
    M.mfunc2(); 
} 

function func2() { 
    M.mfunc1 ('hitSomething'); 
    // does something but line is stable 
    M.mfunc2(); 
} 

function func3() { 
    M.mfunc1 ('doesSoemthing'); 
    //does nothing, but causes memory to grow 
    M.mfunc2(); 
} 

M.mfunc1 = function (name) { 
    // code is all commented out 
} 

M.mfunc2 = function() { 
    // code is all commented out 
} 

func1使用setTimeout在主循环上调用n。当在时间线上使用Chromes的开发工具观看内存时,内存在func3的调用中突然增长,但如果我注释掉M调用,它会保持稳定。我采取了对M.mfunc1M.mfunc2中的所有内容进行评论,只是将它称为一个单独的内容,它会导致内存使用量增加。

现在有人可以向我解释吗?

更新:我让我的代码更像它真正的东西。

更新2:因为我给的例子代码似乎并不成为问题,这里有一个链接到所有代码:http://test.startailpro.co.uk/breaking/

的功能updateupdateDirectionhitBlockdoesBall_hitBlockMEMORY.deepMEMORY.rise

+0

那么从func1调用func3不会导致问题?只有从func2? – ThatMatthew

+2

我相当怀疑我们可以帮助很多,而没有看到真正的代码表现出这个问题。 – jfriend00

+0

@ThatMatthew yeap,根本不会导致问题 – NebulaFox

回答

0

最后我做的是重写整个代码。实际上,我设法在不使用对象的情况下编写整个内容,除了在加载时。我仍然不知道原始代码有什么问题,但我现在能够更好地理解内存使用的增长情况。

Memory being allocated

我会建议小心你选择什么样的框架。我在jQuery中发现事件会导致内存增长。由于您正在为事件生成一个对象和一个对象,因此这不成问题。虽然,我假设事件对象是本地的并且已经被优化,所以内存增长不是问题。再次,小心框架。