2011-09-07 83 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中發現事件會導致內存增長。由於您正在爲事件生成一個對象和一個對象,因此這不成問題。雖然,我假設事件對象是本地的並且已經被優化,所以內存增長不是問題。再次,小心框架。