2012-02-08 69 views
2

我的應用程序永久收到內存警告,我真的找不到是什麼原因造成它。即使我將應用程序剝離到最低限度,我也正在遭受重大泄漏。所以我認爲從monotouch的例子中編譯默認的HelloWorld_IPhone應用程序,看看我是否得到相同的泄漏。事實證明我是這樣做的。真讓我困惑。即使在運行HelloWorld_IPhone monotouch時儀器中泄漏了物體

enter image description here

泄漏只是應用程序啓動之後出現(紅色條填充整個列)。

泄露對象:malloc的16個字節,負責圖書館:HelloWorld_IPhone,負責框架:mono_dl_open

我的問題是,這是否是正常或我是否失去了一些東西?

編輯: 在調試模式下在我的設備上運行TweetStation應用程序時,儀器輸出的屏幕截圖!與我的應用相同的結果。肯定有些事不正確嗎? Screenshot of Instruments output when running TweetStation app on my device

+0

看到別的不包括在你的問題?因爲** 16字節**不是*主*泄漏(除非它每隔幾秒重複一次?!?)。 – poupou 2012-02-08 16:08:10

+0

這是當我運行我的應用程序時的輸出:http://imageshack.us/photo/my-images/821/screenshot20120208at191.png/ – kos 2012-02-08 17:16:08

+0

你有相同的@kos的任何解決方案 – 2015-05-30 11:40:32

回答

0

我覺得你混淆了一些不同的東西。分析工具傾向於顯示大量數據,並且很容易在所有數據中迷失方向。

首先你鏈接的圖像(我把它添加到你原來的問題)是表示兩件事情:

  1. 分配。這是您選擇的工具行。它顯示的是您的應用程序分配的內容。你可以看到一個很多的16字節分配但他們是不是泄漏只是因爲他們在那裏顯示。

  2. 警報顯示您的應用程序已收到低內存警告。 IOW你耗盡了(設備/模擬器)內存,並且你被通知釋放內存(或者iOS會終止你的應用程序)。同樣,這並不意味着有任何(或主要)泄漏。什麼是不是在你的圖片中顯示

是什麼對儀器的第二行(泄漏)。有可能是很多泄漏(但我懷疑你好世界樣本)或只有少數。

在單聲道內部(如mono_dl_open),有些情況下分配內存並且永遠不會釋放(因爲它不可能,例如關閉所需的庫)。這不是一般的問題,因爲如果不卸載(即關閉)應用程序(其中內存將被操作系統全部回收),單聲道運行時不能卸載。

無論如何,我們需要更多的細節來知道這個泄漏(或其他)是否與你的應用程序內存分配(或不是)有關。如果你可以提供給他們(編輯在這裏你的問題)或樣品附加到錯誤報告上http://bugzilla.xamarin.com/

+0

截圖實際上是從我的應用程序在設備上運行,而不是HelloWorld_IPhone。問題仍然存在,我的應用程序收到幾個警告,直到它崩潰。評論者是正確的 - 只有一個漏洞,即我上面描述的漏洞。我真的陷入困境,無法弄清楚如何最好地調試我的應用程序來尋找高內存活動。我想這可能有助於解釋一些關於該應用程序的更多細節。基本上,應用程序使用自定義Web服務來查找類似的案例,並將這些案例作爲XML文檔存儲在'Documents'文件夾中。請參閱下一條評論以獲得更多信息.... – kos 2012-02-08 19:53:57

+0

此外,該應用程序支持生成的音頻創意的音頻錄製和播放,這些創意也存儲在'Documents'文件夾中作爲'wav'文件。但是,我看不出爲什麼這些會導致問題,尤其是因爲我試圖運行應用程序而沒有存儲任何數據,問題依然存在。任何想法從哪裏開始?真的很感謝任何幫助。 (順便說一句,系統不允許我編輯原始問題,由於圖像和我的低信譽...) – kos 2012-02-08 19:54:54

+0

看來你在內存中保留了太多的數據。可悲的是我沒有看到應用程序就不能更精確。您可能想要嘗試MonoDevelop中的MonoTouch分析器,以查看內存的保留位置。 http://docs.xamarin.com/ios/tutorials/MONOTOUCH_PROFILER – poupou 2012-02-08 20:07:05

4

當試圖與儀器非託管代碼調試泄漏,你可以做的是建立一個「分配」的儀器,然後請確保您選擇選項「僅跟蹤活動分配」,像這樣:

Instruments Screenshot http://tirania.org/s/991d39b7.png

這隻能說明目前的「活」,並沒有被釋放的對象。使用Mono,您會注意到一些對象會一直存在,直到垃圾收集器運行。所以隨着時間的推移,分配的物體的峯值消失。

+0

感謝米格爾。奇怪的是,當我在iPod Touch上運行我的應用程序時,我無法理解爲什麼我收到如此多的內存警告(在iPod Touch上的調試模式下),我想上傳TweetStation應用程序(再次調試模式),而不是我很好奇看到結果。令我驚訝的是,輸出結果非常相似,因此引發了大量的內存警告並最終崩潰! (請參閱附加到原始問題的圖片)它可能與我的應用程序無關,而更多與完全不同的東西有關?謝謝你的幫助.... – kos 2012-02-10 08:58:28