2012-12-10 43 views
3

我一直在研究一個庫,並遇到了應用程序內存的問題。AS3內存泄漏

我創建了一個名爲文件管理類,它允許用戶呼叫被叫loadNewFiles功能 - 此功能打開一個多文件選擇對話框,並存儲在一個向量中的每個的FileReferenceList。我可以隨時調用removeList函數,並刪除該列表並清除分配給該列表的所有內存和監聽器,因此一切都很順利。

我創建另一類稱爲UploadManager,這需要的FileReference對象的數組,並通過uploadFiles功能它們上傳到一個URL。內存泄漏似乎在這裏。當你調用這個函數時,它會添加適當的事件監聽器並調用上傳函數。如果上傳失敗或上傳完成後,它消除了聽衆和清除它在一直等待的載體。

上傳管理完成上傳文件後,我稱之爲removeFiles功能文件管理(其中,記,之前工作完美)和...沒有任何反應。文件從兩個向量中刪除,偵聽器從兩個文件中刪除,但內存保持分配狀態。這顯然有潛在的問題,因爲通過圖書館可以獲得的文件,上傳等數量沒有限制。

類:
FileManager
UploadManager

Implementation

+1

你如何確認內存保持分配給這些對象?如果您在Flash Builder中使用分析器,它可以告訴您什麼保持對它在內存中閒置的任何對象的引用。 –

+0

@SunilD。 - 感謝您的回覆,我使用FlashDevelop作爲我的IDE。 對於統計數據,我使用了自己製作的自定義統計信息,從高分辨率統計信息github回購分叉。 – egg82

+0

這種分配可能是暫時的......嘗試重複測試並檢查它是否不斷上升。 – alxx

回答

0

這聽起來像是你的例子是,UploadManager仍具有對文件的引用無論是從傳遞到uploadFiles載體,或其他一些對象遊戲還是有參考價值的。

另請注意,System.gc()僅適用於Flash播放器的調試版本。

所以你不能依賴它作爲建築設計的選擇。當您需要按需查看ActionScript內存消耗時,它可用於單元測試內存密集型操作。

在生產產品中,ActionScript虛擬機在檢測垃圾收集的時間和位置方面非常活躍。大多數人會說,當你不想要它時,它會發生。

嘗試分析應用程序和看「累積實例」與「實例」,以及「累積存儲器」與「存儲器」爲所討論的對象(即一個FileReference)。

您可以在運行時強制進行垃圾收集的個人資料查找來獲得多少內存時,垃圾收集發生在Release版本實際上是解放了真實的想法。