【问题标题】:MonoTouch JIT Error in Release mode on Linq Method在 Linq 方法的发布模式下 MonoTouch JIT 错误
【发布时间】:2011-11-18 19:26:49
【问题描述】:

我目前有一些代码如下所示,它们使用 Linq 为我组织一些 IEnumerables。在以发布模式(iOS 5.0.1、MonoTouch 5.0.1、Mono 2.10.6.1)在设备上执行此代码时,出现异常

在使用 --aot-only 运行时尝试 JIT 编译方法“System.Linq.OrderedEnumerable`1:GetEnumerator()”。

产生这个错误的代码是

// List<IncidentDocument> documents is passed in
List<LibraryTableViewItemGroup> groups = new List<LibraryTableViewItemGroup>();
List<DocumentObjectType> categories = documents.Select(d=>d.Type).Distinct().OrderBy(s=>s.ToString()).ToList();
foreach(DocumentObjectType cat in categories)
{
    List<IncidentDocument> catDocs = documents.Where(d => d.Type == cat).OrderBy(d => d.Name).ToList();
    List<LibraryTableViewItem> catDocsTableItems = catDocs.ConvertAll(d => { return new LibraryTableViewItem{ Image = GetImageForDocument(d.Type), Title = d.Name, SubTitle = d.Description}; });
    LibraryTableViewItemGroup catGroup = new LibraryTableViewItemGroup{ Name = GetCatName(cat), Footer = null, Items = catDocsTableItems };
    groups.Add (catGroup);
}           

此错误不会发生在用于发布|调试配置的模拟器或用于调试配置的设备上。我在 SO herehere 上看到了几个类似的主题,但我不确定我是否理解它们在这个特定问题上如何适用于我。

【问题讨论】:

  • 在我看来,我正在告诉编译器 AOT 一切,所以它不需要事先发现类型吗?我看到了解决方法,但我不明白为什么它们仅在发布/设备中是必需的。如果我告诉 Linq 生成一个具体类型的列表,例如 .ToList&lt;DocumentObjectType&gt;() 而不是 .ToList(),是否足以让编译器正确地 AOT 这些类型?
  • 不,因为问题是 IOrderedEnumerable,而不是 List。虽然我不知道如何在没有 orderby 的情况下创建 IOrderedEnumerable ..

标签: ios linq mono xamarin.ios aot


【解决方案1】:

这可能是一些事情。

  • 在使用 full AOT 构建 iOS 应用程序时,有一些 limitations,即确保在运行时不会 JIT(Apple 限制)。即使消息看起来相同,每一个都是不同的(即许多原因会导致这种情况)。不过,我们通常可以为他们推荐一些简单的解决方法;

  • 它也可能是 5.0.1 中的(已知)回归(在 5.0.2 中已修复)。这产生了一些额外的 AOT 故障,这些故障通常不是问题(或已经解决的问题)。

我建议您更新到 MonoTouch 5.0.2 以查看它是否可以正确编译您的应用程序。如果没有,请在 http;//bugzilla.xamarin.com 上填写错误报告,并包含一个小型、独立的测试用例来复制问题(以上内容不够完整)。如果它在启用调试时有效,这似乎是一个有趣的测试用例。

【讨论】:

  • 我更新到 5.0.2,创建了一个小测试用例,但在硬件上的发布模式下仍然存在问题。正如你提到的,我将提交一份错误报告。感谢您抽出宝贵时间回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 2012-08-15
  • 2015-12-25
相关资源
最近更新 更多