如何加快MonoTouch编译时间?

Dan*_*mov 44 c# xamarin.ios compilation-time xamarin

这是众所周知的是

如果编译甚至需要15秒,程序员在编译器运行时会感到无聊并切换到读取Onion,这会吸引他们并消耗数小时的生产力.

我们的MonoTouch应用程序在调试/模拟器配置中需要40秒才能在Macbook Air上进行编译.

我们在解决方案中有大约10个组件.
我们还与一些本地库链接gcc_flags.

我确信有一些方法可以优化我不知道的编译时间,这可能与引用,链接器等有关.

我问这个问题,希望知识比我更好的人会编译(没有双关语)一系列提示和事项要检查以减少调试版本的MonoTouch编译时间.

不要建议与MonoTouch没有直接关系的硬件优化或优化.

pou*_*pou 45

Xamarin.iOS 6.4中的构建时间改进

Xamarin.iOS 6.4具有显着的构建时间改进,现在可以选择仅向设备发送更新的代码.你自己看:

建立时间改进

阅读更多内容并学习如何在Rolf的帖子中启用增量构建.

Evolve 2013视频

这个内容的更新和扩展版本可以在我在Evolve 2013上发布Advanced iOS Build mechanics talk 的视频中看到.

原始答案

影响构建速度的因素有很多.但是,它们中的大多数对设备构建有更大的影响,包括使用您提到的托管链接器.

托管链接器

对于设备,然后链接所有是最快的,其次是链接SDK和(在最后)不链接.原因是链接器可以比AOT编译器更快地消除代码(净增益).此外,较小的.app会更快地上传到您的设备.

对于模拟器不要链接总是更快,因为没有AOT(使用JIT).您不应该使用其他链接选项,除非您想测试它们(它仍然比进行设备构建更快).

设备技巧

  • 构建单一体系结构(例如ARMv7)比FAT二进制文件(例如ARMv7 + ARMV7s)更快.较小的应用程序也意味着上传到设备的时间更短;

  • 默认 AOT编译器(单声道)比使用LLVM编译器快了很多.但是后者会生成更好的代码并且还支持ARMv7s,Thumb2;

  • 如果您的.app中捆绑了大型资产,那么部署/上传它们(每次必须签署)都需要一段时间才能与您的应用程序一起使用.我写了一篇关于如何解决这个问题的博客文章 - 如果你拥有大量资产,它可以节省大量时间;

  • 对象文件缓存在MonoTouch 5.4中实现.一些构建将更快,但其他构建将不会(当缓存必须被清除时)更快(但从不慢;-).更多信息为什么这经常发生在这里).

  • 调试构建需要更长的时间,因为符号,运行,dsymutil并且因为它最终变大,上传到设备的额外时间.

  • 默认情况下,发布版本(您可以将其关闭)执行程序集的IL条带.这只需要一点时间 - 在向设备部署(较小的.app)时可能会获得回报.

模拟器技巧

  • 像之前所说的那样试着避免链接,因为它需要更多的时间并且需要复制程序集(而不是对它们进行符号化);

  • 使用本机库比较慢,因为在这种情况下我们不能重用共享的simlauncher主可执行文件,并且需要让gcc为应用程序编译一个(这很慢).

最后每当有疑问的时候!我的意思是你可以添加--time --time到你的项目中extra mtouch arguments,看看每次操作后的时间戳:-)

  • 我很高兴它可以从你的构建中刮几秒钟! (2认同)