2012-02-27 74 views
1

我在使用c#和silver light平臺的Windows手機中創建了一個遊戲。我是這種技術的新人,目前面臨內存泄漏問題。根據我所做的研究和研究,我試圖做所有的事情,包括事件,字符串和垃圾回收器的使用。Windows Phone開發中的內存泄漏問題 - Silver Light Framework

任何人都可以給出共同的提示,以最好地利用垃圾收集器和內存管理,因爲它現在似乎問題。當我的垃圾收集器達到5 lac大小,它停止收集新的東西和應用程序正在崩潰。

我也嘗試清空gc collect中的垃圾collectore傳遞參數0,但它正在崩潰應用程序。

您可以請指導和幫助基本的事情要照顧,遵循的過程,以避免這樣的問題和最佳使用GC收集?

由於提前, 雅各

回答

0

沒有看到任何你的代碼,它是很難給出具體建議。

但是,我強烈建議您運行一個內存分析工具,如ANTS Memory Profiler.Net Memory Profiler。這些工具將向您顯示您的代碼的哪些部分從未發佈,並且在進行所需的調整時非常有用。

+0

Windows Phone實際上附帶了它自己的內存分析器(並且正常的.NET不能使用它)。 – 2012-02-28 07:26:19

3

一般來說,你應該從來沒有必須自己調用GC.Collect作爲未使用的對象將自動收集每隔幾秒鐘。

至於什麼可以阻止對象被收集,它歸結爲他們「根植」。羅茨包括:

  • 任何靜態引用
  • 由運行環舉行的任何引用(你Application是這裏最接近)當前頁面或背後
  • 任何事,頁面上顯示
  • 什麼參考由任何上述(包括UI事件),或任何引用的任何上述(等)任何引用。

在上述情況下,這些對象和任何對象他們堅持基準不能被GC'd。因此,作爲建議:

  • 避免定義什麼是static
  • 小心多少對象被Application
  • 召開避免導航模式,讓你的背部棧增長到ulimited水平
  • 潛在看看在設置引用大型數據集在你的頁面/視圖模型的OnNavigatedFrom方法爲null,重新初始化它們OnNavigatedTo

我建議使用7.1 SDK附帶的Windows Phone Profiler。它會告訴你什麼是記憶中的對象和原因。