Ошибка JIT MonoTouch в режиме Release по методу Linq - PullRequest
3 голосов
/ 18 ноября 2011

В настоящее время у меня есть некоторый код, как показано ниже, который использует Linq для организации некоторых IEnumerables для меня. При выполнении этого кода на устройстве в режиме выпуска (iOS 5.0.1, MonoTouch 5.0.1, Mono 2.10.6.1) я получаю исключение

Попытка JIT-метода компиляции 'System.Linq.OrderedEnumerable`1: GetEnumerator ()' при работе с параметром --aot-only.

Код, который генерирует эту ошибку:

// 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);
}           

Эта ошибка не возникает в симуляторе для конфигураций Release | Debug или на устройстве для конфигурации Debug. Я видел пару похожих тем на SO здесь и здесь , но я не уверен, что понимаю, как они относятся ко мне в этом конкретном вопросе.

1 Ответ

3 голосов
/ 19 ноября 2011

Это может быть несколько вещей.

  • Существуют некоторые ограничения при использовании full AOT для создания приложений iOS, то есть обеспечение того, что ничего не будет JITted во время выполнения (ограничение Apple).Каждый из них отличается, даже если сообщение выглядит идентично (т.е. к этому приведет множество причин).Однако, как правило, для них есть простые обходные пути:

  • Это также может быть (известная) регрессия в 5.0.1 (которая исправлена ​​в 5.0.2).Это привело к нескольким дополнительным сбоям AOT, которые обычно не являются проблемами (или уже исправлены).

Я предлагаю вам обновить MonoTouch 5.0.2, чтобы проверить, правильно ли он компилирует ваше приложение.Если нет, то, пожалуйста, заполните отчет об ошибке на сайте http; // bugzilla.xamarin.com и включите небольшой автономный тестовый пример, чтобы продублировать проблему (вышеприведенного недостаточно).Кажется интересным контрольный пример, если он работает, когда включена отладка.

...