作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要为 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/
我是一名优秀的程序员,十分优秀!