MonoTouch性能与Objective-C/Java的比较

9
我正在开发一个多平台游戏引擎,并使用MonoTouch来覆盖Android和iPhone。我对在iOS和Android开发中使用MonoTouch的性能方面非常感兴趣,是否有人知道使用Java或Objective-C开发相应平台时,MonoTouch会产生什么样的性能影响?我从游戏开发者的角度来问这个问题,所以像绘图代码之类的东西真的让我很担心。从我所见到的mono应用程序来看,它们运行得很好,但是假设你制作了一款像愤怒的小鸟(艺术作品、声音、物理处理)那样的游戏,通过mono运行是否足够流畅,以至于你不会因为使用平台的本地语言而处于明显的劣势?

Java在Android上并不是完全“本地”的,据我所知,Mono更快,因为它比Dalvik有更好的JIT。 - skolima
1
Mono 比 Objective C 更快吗?我可以接受它比 Java 快(说真的,这些天什么不比 Java 快?:P),但我真的很担心 MonoTouch 在 iOS 上会比 Objective C 慢很多... - meds
1
我相信在生产力方面的提高以及您可以在Android和iPhone上使用相同的语言(甚至可以在Windows Phone上使用),这将远远超过使用MonoTouch所带来的任何性能损失。 - jonathanpeppers
将我的评论扩展为一个答案。 - skolima
2
@Jonathan.Peppers 如果应用在MonoTouch下运行太慢,任何生产力的提高都无法抵消这一点。 - kaalus
显示剩余2条评论
1个回答

21

首先需要澄清的是,在Android上,代码不是由Java运行时执行的,而是由谷歌从头编写的Dalvik执行的。因此,Java虚拟机的性能与这个问题无关。

考虑到这一点:大多数Android上的程序不执行本地代码,而是在Dalvik虚拟机上运行(该虚拟机运行经过转换的Java字节码)。Mono JIT已经在之前与Dalvik VM进行了基准测试,并始终被发现更快(例如,可以查看http://www.koushikdutta.com/2009/01/dalvik-vs-mono.html)。

在iOS上,MonoTouch必须先将代码预编译成本地应用程序,然后才能安装到苹果设备上(因为许可证限制是由操作系统强制执行的)。话虽如此,无论是Objective C编译器还是Mono的AOT编译都使用相同的LLVM后端来生成和优化二进制代码,因此您得到的结果应该几乎相同(对于Mono来说会有一些内存开销)。

请记住Donald Knuth的一句重要引语:"过早的优化是万恶之源。" 编写代码时要考虑性能,但记住可维护性更重要。只有在必要时才应进行优化(通常编译器可以比您做得更好)。


嗯,似乎仍然没有直接比较MonoTouch和Objective C的内容... - meds
1
因为一般而言,并没有什么区别。如果你有具体的性能问题,你必须自己进行测量。 - skolima
1
据我所知,Dalvik虚拟机的原始版本并非来自Google。 - Puce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接