[英]Xamarin Java.Lang.Object creation is inefficient
我需要为ListView / GridView生成大量对象。 据我了解,这些对象必须派生自Java.Lang.Object。 生成这些对象所花费的时间很长。
我创建了一个简单的测试,以查看简单地创建从Java.Lang.Object派生的5000个对象需要花费多长时间,并将其与创建从System.Object派生的5000个对象进行比较。
public class MyJavaObject : Java.Lang.Object { }
public class MyObject : System.Object { }
private void CreateObjects()
{
var objectCount = 5000;
var javaObjectsWatch = new Stopwatch();
javaObjectsWatch.Start();
for (int i = 0; i < objectCount; i++)
{
new MyJavaObject();
}
javaObjectsWatch.Stop();
var javaObjectsCreationElapsed = javaObjectsWatch.Elapsed.TotalMilliseconds;
Console.WriteLine($"{objectCount} java objects took {javaObjectsCreationElapsed} milliseconds");
var objectsWatch = new Stopwatch();
objectsWatch.Start();
for (int i = 0; i < objectCount; i++)
{
new MyObject();
}
objectsWatch.Stop();
var objectsCreationElapsed = objectsWatch.Elapsed.TotalMilliseconds;
Console.WriteLine($"{objectCount} objects took {objectsCreationElapsed} milliseconds");
}
运行CreateObjects会将以下内容写入控制台。
“ 5000个Java对象花费了4437.1033毫秒”
“ 5000个对象耗时1.831毫秒”
创建MyJavaObjects大约需要4.5秒,而MyObjects甚至不需要百分之一秒。
如何获得MyJavaObjects的创建,使其更接近创建MyObjects的效率?
Java对象的创建包含以下部分:1)在Dalvik VM上创建对象; 2)在Xamarin.Android VM上创建的相应对象,用于跟踪其他对象的生命周期。 与.NET / COM互操作非常相似。
因此,它的速度不会像您希望的那样快,但是对于大多数移动应用程序来说仍然足够快。 当解决方案需要使用一组特定的组件时,这是一个负担。 对于其他情况,Xamarin.Android可以直接调用Android本机API,而无需触摸Dalvik。
一些内部信息可以在Miguel de Icaza在Android版Mono上的博客中找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.