繁体   English   中英

Xamarin Java.Lang.Object创建效率低下

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM