我在Miguel de Icaza的一些写作中提到了使用mono制作iphone应用程序的提前编辑(aot)。这听起来像是本机代码的结果。 是这样还是有什么区别?
答案 0 :(得分:5)
当你使用aot = full(仅在几个平台上支持)时,在运行时不会有任何代码被JIT。
但是您仍然需要运行时来提供应用程序使用的许多功能。 Mono的运行时包括对垃圾收集,线程管理,IO层,IOremapping层,操作系统接口,对十进制类型的支持,反射的支持(所以你仍然可以做类似于.GetMethods()的事情)
答案 1 :(得分:2)
AOT编译是,Mono将在程序运行之前将方法编译为本机代码。你可以阅读它here
答案 2 :(得分:2)
是的,结果是本机代码,但在基本的AOT版本中,仍然需要Mono运行时才能执行。
“iPhone上的Mono”场景中发生的事情有点复杂。首先,使用Mono Linker修剪托管库。然后使用mono --aot=full
将结果编译为本机代码。最后,所有这些都传递给mkbundle以将其打包成单个可执行文件,包括Mono运行时。
如果您只想在不安装Microsoft .Net / Mono的情况下运行.Net应用程序,那么只需使用mkbundle。