即使在运行HelloWorld_IPhone monotouch时,仪器中也会泄漏物体

时间:2012-02-08 15:24:57

标签: ios memory-management memory-leaks xamarin.ios instruments

我的应用程序永久收到内存警告,我真的找不到导致它的原因。即使我将应用程序剥离到最低限度,我也遇到了严重的泄漏。所以我想从单触摸示例编译默认的HelloWorld_IPhone应用程序,看看我是否得到了相同的泄漏。事实证明我做到了。真让我困惑。

enter image description here

应用程序启动后会出现泄漏(红色条填满整列)。

  

泄露的对象:Malloc 16 Bytes,Responsible Library:HelloWorld_IPhone,负责框架:mono_dl_open

我的问题是这是正常还是我遗失了什么?

修改: 在调试模式下在我的设备上运行TweetStation应用程序时,仪器输出的屏幕截图!与我的应用程序结果相同。肯定有些事情不对吗? Screenshot of Instruments output when running TweetStation app on my device

2 个答案:

答案 0 :(得分:5)

当尝试使用Instruments调试非托管代码中的泄漏时,您可以创建一个“分配”工具,然后确保选择“仅跟踪活动分配”选项,如下所示:

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

这仅显示当前“活动”且尚未发布的对象。使用Mono,您会注意到垃圾收集器运行之前会保留一些对象。因此,随着时间的推移,分配对象的峰值消失。

答案 1 :(得分:0)

我认为你混淆了一些不同的东西。分析工具往往会显示大量数据,并且很容易在所有数据中丢失。

首先,您链接的图片(我将其添加到原始问题中)显示了两件事:

  1. 分配。这是您选择的乐器行。它显示的是您的应用程序分配的内容。您可以看到很多的16字节分配,但它们泄漏只是因为它们显示在那里。

  2. 显示您的应用已收到内存不足警告的警报。 IOW你耗尽了(设备/模拟器)内存并且你被通知释放内存(或iOS会杀死你的应用程序)。同样,它并不意味着存在任何(或主要的)泄漏。

  3. 你的照片中没有显示的是乐器的第二行(泄漏)。 可能会出现大量泄漏(但我怀疑是为了问候世界样本)还是只有少数泄漏。

    在Mono中有一些情况(例如mono_dl_open),其中内存被分配并且从未被释放(因为它不能,例如它将关闭所需的库)。这通常不是一个问题,因为如果没有卸载(即关闭)您的应用程序(操作系统将回收所有内存),则无法卸载单声道运行时。

    无论如何,我们需要更多细节才能知道这个泄漏(或其他)是否与您的应用程序内存分配相关(或不相关)。如果您可以提供它们(在此处编辑您的问题)或将示例附加到http://bugzilla.xamarin.com/上的错误报告