gpt4 book ai didi

c# - MonoTouch AOT 编译器 - 大型方法失败

转载 作者:太空狗 更新时间:2023-10-29 20:28:19 25 4
gpt4 key购买 nike

我正在开发一款游戏,我们一直以 JSON 格式存储关卡信息。这些级别非常大,因此我们转而将它们存储在纯 C# 中:

  • 顶级方法有一个用于级别/对象名称的 switch 语句
  • 有几个自动生成的方法可以使用标准属性初始化器“更新”我们的对象树

例子:

private OurObject Autogenerated_Object1()
{
return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}

除了这些方法非常大并且有其他对象的嵌套列表/字典等。

这将加载关卡的时间从 2-3 秒缩短到几分之一秒(在 Windows 上)。与 JSON 相比,我们的数据大小也小得多,因为编译后的 IL。

问题是当我们在 MonoDevelop 中为 MonoTouch 编译这些时,我们得到:

mtouch 以代码 1 退出

打开-v -v -v,我们可以看到错误:

MONO_PATH=/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app /Developer/MonoTouch/usr/bin/arm-darwin-mono --aot=mtriple=armv7-darwin,full,static,asmonly,nodebug,outfile=/var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp54777849.tmp/monotouch.dll.7.s "/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/monotouch.dll"
AOT Compilation exited with code 134, command:
MONO_PATH=/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app /Developer/MonoTouch/usr/bin/arm-darwin-mono --aot=mtriple=armv7-darwin,full,static,asmonly,nodebug,outfile=/var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp54777849.tmp/DrawAStickmanCore.dll.7.s "/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/DrawAStickmanCore.dll"
Mono Ahead of Time compiler - compiling assembly /Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/DrawAStickmanCore.dll
* Assertion: should not be reached at ../../../../../mono/mono/mini/mini-arm.c:2758

为 AOT 编译时,方法中的行数是否有限制?是否有一些参数我们可以传递给 mtouch 来解决这个问题?有些文件工作正常,但特别是导致错误的文件有一个 3,000 行的方法。无论如何,为模拟器编译都可以正常工作。

这仍然是一个实验,所以我们意识到这是一个非常疯狂的情况。

最佳答案

当您遇到 AOT 编译器中永远不会应该出现的条件时,就会出现这些断言。请将此类情况报告给http://bugzilla.xamarin.com

Is there some argument we can pass to mtouch to fix this?

可能能够通过使用 LLVM(或不使用它)来解决此问题,因为它是一个不同的代码生成引擎。根据发生在哪个阶段(有些是共享的),您可能不会遇到相同的情况。

当然,LLVM 构建速度较慢且不支持调试,因此这并不是适用于所有情况的理想解决方法。

关于c# - MonoTouch AOT 编译器 - 大型方法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603981/

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