它说使用值类型作为字典键会“在设备上很快崩溃和烧毁”,这是否意味着我不能使用 Dictionary<int, string> 之类的东西来制作字符串查找表?
问问题
1044 次
1 回答
8
它说使用值类型作为字典键将“在设备上很快崩溃和烧毁”,
它不是那么戏剧化(没有燃烧)或那么自动 - 但它可能会发生。
Apple 不允许在设备上进行 JIT(即时)编译。这意味着在部署到设备之前,必须(提前)预编译所有内容。这意味着MonoTouch 存在一些限制,而 .NET / Mono 或 Mono for Android 则没有这些限制。
一般来说,生成的泛型代码可以在不同类型之间共享。遗憾的是,这对于值类型是不可能的。这意味着 AOT(提前)编译器必须为正在使用的每种值类型生成代码。
在某些情况下,AOT 编译器可能无法检测到运行时可能需要的所有可能类型。这将导致EngineExecutionException
将您指向有问题的代码。
在这个阶段,您可以尝试:
提示AOT 编译器需要该代码(即添加一些代码,使 AOT 编译器生成所需的缺失代码);或者
重构代码,例如避免值类型;
这是否意味着我不能使用 Dictionary 之类的东西来制作字符串查找表?
不,这会奏效。当您创建Dictionary<int, string>
then 的实例时,AOT 编译器很容易知道需要生成哪些代码。
问题通常发生在嵌套泛型或使用这样做的代码时(例如,具有值类型的 LINQ 查询可以生成此类代码)。
于 2013-01-15T16:55:55.263 回答