Uitableview 单纵断面vs XCode仪器。描述
我正在iPhone上评测我的应用程序。我正在创建许多Uitableview 单纵断面vs XCode仪器。描述,uitableview,mono,xamarin.ios,monotouch.dialog,xamarin,Uitableview,Mono,Xamarin.ios,Monotouch.dialog,Xamarin,我正在iPhone上评测我的应用程序。我正在创建许多UIWebView,并将它们粘贴在一个MonoTouch.Dialog表中(比如1000)。我有一个按钮,用于清除表部分,并处理WebView和对任何WebView的任何引用 我注意到在Mono Profile中,UIWebview的实例降到了零(这是应该的)。但是,如果我使用工具(分配)进行相同的测试,它表明“实时”网络视图的数量从未减少,内存也从未恢复。我甚至尝试了GC.Collect,但没有任何区别 我还看到Mono剖面图显示,使用的总r
UIWebView
,并将它们粘贴在一个MonoTouch.Dialog表中(比如1000)。我有一个按钮,用于清除表部分,并处理WebView和对任何WebView的任何引用
我注意到在Mono Profile中,UIWebview
的实例降到了零(这是应该的)。但是,如果我使用工具(分配)进行相同的测试,它表明“实时”网络视图的数量从未减少,内存也从未恢复。我甚至尝试了GC.Collect,但没有任何区别
我还看到Mono剖面图显示,使用的总ram约为1.5兆欧,而仪器显示的ram约为5兆欧
第一项与我更为相关,因为我似乎无法恢复该内存并销毁所有这些实例。我读错了还是有其他问题?谢谢。如果在Mono profiler中UIWebView实例的数量减少了,但在Instruments中没有减少,这意味着本机代码保留了对这些实例的引用,从而阻止了它们的发布 我建议您在分配工具中启用“记录引用计数”选项,然后在UIWebView实例仅出现在工具中时调查重新计数-您需要将每个retain调用与释放调用配对(但至少会有一个您无法配对的调用,这就是您正在寻找的调用)。此时,您需要弄清楚为什么retain调用没有相应的release调用
Mono配置文件和Allocations工具实际上都没有告诉您所使用的ram总量(它们测量的是不同的东西,这就是数字不同的原因)。Mono profiler仅测量托管对象,而Allocations对象测量除托管对象外的大多数(但不是全部)本机分配。如果Mono profiler中的UIWebView实例数量减少,而不是仪器中的UIWebView实例数量减少,则表示本机代码持有对这些实例的引用,阻止他们被释放 我建议您在分配工具中启用“记录引用计数”选项,然后在UIWebView实例仅出现在工具中时调查重新计数-您需要将每个retain调用与释放调用配对(但至少会有一个您无法配对的调用,这就是您正在寻找的调用)。此时,您需要弄清楚为什么retain调用没有相应的release调用
Mono配置文件和Allocations工具实际上都没有告诉您所使用的ram总量(它们测量的是不同的东西,这就是数字不同的原因)。Mono profiler只测量托管对象,而Allocations对象测量除托管对象之外的大多数(但不是全部)本机分配。我认为这是一个误解
- MonoTouch.Dialog基于
。它可以隐藏很多复杂性,但潜在的行为仍然是相同的UITableView
使用UITableView
实例。然而,为了最小化内存需求,它尽可能地重用单元。因此,一个有1000个单元格的表,在屏幕上只显示12个单元格,可能只需要分配(不超过)12个单元格(不是1000个)UITableViewCell
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个元素
- 当被要求时,元素创建一个新的单元格,大约14次填充屏幕,然后重复使用它们(例如,如果滚动)
清除UI(而不是section.Clear
单元格缓存)UITableView
- Instruments向您显示了
分配的内容(例如14个缓存/可重用单元)UITableView
- 当您处理由
分配的对话框ViewController
时,这些单元格将被释放。否则(缓存的)单元格不在您的控制之下UITableView
- MonoTouch.Dialog基于
。它可以隐藏很多复杂性,但潜在的行为仍然是相同的UITableView
使用UITableView
实例。然而,为了最小化内存需求,它尽可能地重用单元。因此,一个有1000个单元格的表,在屏幕上只显示12个单元格,可能只需要分配(不超过)12个单元格(不是1000个)UITableViewCell
- 我认为这是一种误解
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个元素
- 当被要求时,元素创建一个新的单元格,大约14次填充屏幕,然后重复使用它们(例如,如果滚动)
清除UI(而不是section.Clear
单元格缓存)UITableView
- Instruments向您显示了
分配的内容(例如14个缓存/可重用单元)UITableView
- 当您处理由
分配的对话框ViewController
时,这些单元格将被释放。否则(缓存的)单元格不在您的控制之下UITableView