Hai*_*der 6 ios xamarin xamarin.mac xamarin-studio xamarin.forms
我最近在Xamarin Forms App中测试了CachingStrategy一个ListView包含1000个项目的a.正在从数据模板创建列表项ViewCell.我尝试使用RecycleElement选项CachingStrategy.
当我使用Xamarin Profiler对在Xamarin Anroid Player(模拟器)上部署的Android App进行分析时,我注意到当我滚动列表时,内存分配不会增加(在分配摘要选项卡上).但是,当我在模拟器上对iPhone App进行性能分析时,我注意到Allocations Summary选项卡上没有显示任何数据.所以我在滚动列表时捕获了一些快照,并注意到每当我滚动列表(向上或向下)时,内存分配不断增加.
为什么RecycleElement不适用于iOS(iPhone)?
我正在使用Mac进行开发. 这是我的工具:
=== Xamarin Studio ===
版本5.10.1(版本3)安装UUID:7ae992a3-b710-4297-ba1d-0c519fbb2ea8运行时:Mono 4.2.1(显式/ 6dd2d0d)GTK + 2.24.23(Raleigh主题)
Package version: 402010102
Run Code Online (Sandbox Code Playgroud)
=== Xamarin.Profiler ===
版本:0.24.0.0位置:/ Applications/Xamarin Profiler.app/Contents/MacOS/Xamarin Profiler
=== Apple Developer Tools ===
Xcode 7.1.1(9081)Build 7B1005
=== Xamarin.iOS ===
版本:9.2.1.54(企业版)哈希:eb4c1ef分支:master建立日期:2015-12-01 02:12:30-0500
=== Xamarin.Android ===
版本:6.0.0.34(企业版)Android SDK:/ Users/haider/Library/Developer/Xamarin/android-sdk-macosx支持的Android版本:4.0.3(API级别15)4.4(API级别19)5.0(API级别) 21)5.1(API级别22)6.0(API级别23)
SDK工具版本:24.4.1 SDK平台工具版本:23.1 rc1 SDK构建工具版本:23.0.2
Java SDK:/ usr java version"1.7.0_71"Java(TM)SE运行时环境(版本1.7.0_71-b14)Java HotSpot(TM)64位服务器VM(版本24.71-b01,混合模式)
=== Xamarin Android Player ===
版本:0.6.5位置:/ Applications/Xamarin Android Player.app
=== Xamarin.Mac ===
版本:2.4.0.109(简化版)
===构建信息===
版本号:510010003 Git修订版:f2021a209d66d49cbc0649a6d968b29040e57807生成日期:2015-12-01 10:43:40-05 Xamarin插件:dfd4f5103e8951edbc8ac24480b53b53c55e04ff构建通道:monodevelop-lion-cycle6-baseline
===操作系统===
Mac OS X 10.11.1 Darwin Haiders-MacBook-Pro.local 15.0.0 Darwin内核版本15.0.0星期六9月19日15:53:46 PDT 2015 root:xnu-3247.10.11~1/RELEASE_X86_64 x86_64
在 Xamarin Profiler 中,确保您仅查找自定义 ViewCell 类,并拍摄多个快照以触发垃圾收集器。如果 ViewCell 的数量没有增加,则可能是其他原因导致内存泄漏。如果 ViewCell 的数量不断增加,请继续执行下面的建议 2 和 3。Xamarin Profiler ViewCell 示例
在 ViewCell 代码中,确保OnBindingContextChanged()在 中重写并设置控件的属性OnBindingContextChanged(),而不是在 ViewCell 的构造函数中。我在下面添加了一些示例代码,展示了如何ListViewCachingStrategy.RecycleElement使用自定义 ViewCell 实现该策略。
OnAppearing()ViewCell 类的方法中订阅事件处理程序,并在OnDisappearing()ViewCell 类的方法中取消订阅事件处理程序。我在下面的示例 ViewCell 代码中添加了注释。ListView = new ListView(ListViewCachingStrategy.RecycleElement)
{
DataTemplate(typeof(CustomViewCell))
};
Run Code Online (Sandbox Code Playgroud)
public class CustomViewCell : ViewCell
{
Label _myLabel;
MenuItem _deleteAction;
public CustomViewCell()
{
_myLabel = new Label();
View = _myLabel;
}
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
_myLabel.Text = "";
var item = BindingContext as MyModel;
if (item != null)
{
_myLabel.Text = item.Text;
}
}
protected override void OnAppearing()
{
base.OnAppearing();
//Subscribe ViewCell Event Handlers
_deleteAction.Clicked += HandleDeleteClicked;
ContextActions.Add(_deleteAction);
}
protected override void OnDisappearing()
{
base.OnDisappearing();
//Unsubscribe ViewCell Event Handlers
_deleteAction.Clicked -= HandleDeleteClicked;
ContextActions.Remove(_deleteAction);
}
void HandleDeleteClicked(object sender, EventArgs e)
{
//Code to handle when the delete action is tapped
}
}
Run Code Online (Sandbox Code Playgroud)
public class MyModel
{
[PrimaryKey]
public int ID { get; set; }
public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |