2009-08-26 68 views
4

在Windows中,當應用程序被最小化時,OS通過將數據放在頁面文件中來釋放與應用程序相關的內存。其他垃圾收集也可能執行。IE瀏覽器內存管理和javascript的有趣觀察

在Internet Explorer運行我的JavaScript應用程序的情況下,我發現如果內存使用量從60MB開始,那麼最小化瀏覽器會將內存減少到17mb。最大化然後把它帶回40mb

20mb增益。

我的應用程序大量使用javascript,我懷疑IE強制不再引用對象的garabage集合。

通過JavaScript(IE)您可以強制垃圾回收通過:

CollectGarbage() 

所以,如果我把這個方法(沒有最小化屏幕)我只收回一兆或2

如果我通過事件隊列調用此:

setTimeout(CollectGarbage, 1000) 

我收回約3兆

我的應用程序提示是爲了全天運行而設計的,所以內存管理非常重要。

有人有任何想法如何強制IE清理其內存的程度與手動迷你版一樣嗎?

以編程方式最小化瀏覽器的建議將被嘲笑!

乾杯:)

+0

您的應用程序是否使用任何特定的庫或框架? – 2009-08-26 16:22:54

回答

1

使用delete關鍵字取消定義變量/屬性,爲您節省內存。 More here

但是,如果您只需要丟失對對象屬性的引用,只需將其設置爲null並等待下一個集合。

小心使用閉包和lambda函數,因爲它們傳統上是內存豬和泄漏源。請參閱Understanding and Solving Internet Explorer Leak Patterns

+1

刪除從原型刪除屬性,因此刪除參考.. obj.prop = null只是刪除引用。 所以,在刪除的情況下,如果你要遍歷objs屬性,你會發現屬性的數量會減少。 在obj.prop = null的情況下,屬性的數量保持不變。 從記憶的角度來看,這些方法之間的差異並不顯着,但它們在語義上完全不同。 – iasksillyquestions 2009-08-26 14:57:51

+0

你在你的答案中明確鏈接的Mozilla文檔中說'delete'與釋放內存無關...... – 2016-12-20 17:14:26

+1

嘿@MikeYoung,感謝7年後的對抗性評論。無論如何,我會很好,並解釋理由。是的,我知道'delete'不能自行釋放內存。我知道垃圾收集是什麼以及它是如何工作的。我甚至會說我知道7年前的情況。這個垃圾回收是我所追求的。如果你有'obj ['foo'] = expensiveObj',刪除''foo''將刪除一個引用。假設這是唯一的參考,你已經盡力影響下次掃描期間釋放的內存。 – geowa4 2016-12-24 02:23:58