首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mono Profile vs XCode Instruments。描述

Mono Profile vs XCode Instruments。描述
EN

Stack Overflow用户
提问于 2013-01-29 04:37:35
回答 2查看 202关注 0票数 1

我正在iPhone上分析我的应用程序。我创建了很多UIWebView,并将它们粘贴到一个MonoTouch.Dialog表中(比方说1000)。我有一个按钮,可以清空表格部分,并处理any视图和对任何WebViews的引用。

我注意到在单声道配置文件中,UIWebview的实例减少到了零(这是理所当然的)。然而,如果我使用Instruments (分配)做同样的测试,它显示“实时”the浏览量从未减少,内存也从未恢复。我甚至试过GC.Collect,结果也没什么不同。

我还看到Mono配置文件显示,当在Instruments中显示约5meg时,正在使用的总ram约为1.5兆。

第一个项目更让我担心,因为我似乎无法恢复该内存并销毁所有这些实例。我是理解错了,还是有其他问题?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-29 20:39:59

如果UIWebView实例的数量在Mono profiler中下降,但在Instruments中没有下降,这意味着本机代码持有对这些实例的引用,阻止它们被释放。

我建议您在Allocations工具中启用"Record reference count“选项,然后在UIWebView实例仅出现在Instruments中时调查retainCount -您需要将每个保留调用与一个release调用配对(但至少会有一个无法配对,而这正是您要寻找的)。此时,您需要弄清楚为什么保留调用没有相应的释放调用。

Mono配置文件和分配工具实际上都不会告诉您正在使用的ram总量(它们测量的是不同的东西,这就是数量不同的原因)。Mono分析器仅测量托管对象,而Allocations对象除了测量托管对象外,还测量大多数(但不是全部)本机分配。

票数 4
EN

Stack Overflow用户

发布于 2013-01-30 03:59:25

我想这是个误会。

  • MonoTouch.Dialog是基于UITableView的。它可以隐藏它的很多复杂性,但底层行为仍然是identical;
  • UITableView使用UITableViewCell实例。然而,为了最大限度地减少内存需求,它尽可能地重用单元。因此,一个有1000个单元格的表格,在屏幕上只显示12个单元格,可能只需要分配(不超过)12个单元格(而不是1000个)。

普通(或MT.D)代码如下所示:

代码语言:javascript
复制
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
    var cell = tableView.DequeueReusableCell ("cell") as MyCell;
    if (cell == null) {
        // create new cell
        cell = new MyCell ();
    } else {
        // prepare cell for reuse
    }
    // customize cell
    return cell;
}

可能发生的情况是:

当你创建1000个elements;

  • when请求元素创建一个新的
  • 单元格时,大约会填满屏幕14次,然后它会重用它们(例如,如果你使用elements;
  • when清除UI (而不是UITableView单元格),cache);
  • Instruments会告诉你UITableView已经分配了什么(例如,14个缓存的/可重用的DialogViewController单元格将在你释放时释放,这是由DialogViewController分配的)。否则(缓存的)单元格将不在您的控制之下;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14570776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档