gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 08:36:59 25 4
gpt4 key购买 nike

我需要为 ListView/GridView 生成大量对象列表。据我了解,这些对象必须派生自 Java.Lang.Object。生成这些对象所花费的时间很长。

我创建了一个简单的测试来查看简单地创建 5000 个派生自 Java.Lang.Object 的对象需要多长时间,并将其与创建 5000 个派生自 System.Object 的对象进行比较。

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 博客中找到一些内部信息。

关于java - Xamarin Java.Lang.Object 创建效率低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35904448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com