Please always c.c. the mailing-list or we lose the googlability for future references.
On Thu, Mar 1, 2012 at 12:33 PM, Rodrigo Kumpera <kump...@xamarin.com> wrote: > Hi Dan, > > I'm in no way the expert on the subject, as you could see by me giving you > bad advice. I'm CC'ing Sebastien, > who has a better understanding on the subject and might have some ideas on > how to workaround it. > > There's on option I know that works. Which is to replace int with an object > wrapper. Performance won't be > stelar, but it will definitely work. That's a hack we used in several cases [1] for LINQ to workaround full-AOT limitations [2]. In your case you could do something like: var x = from l in list orderby l.Name, l.Id.ToString () select l; That turns the value-type (int) into a class (string). It can be expensive but it's faster at sort'ing than a ExecutionEngineException would be :-| The other solution would be to avoid LINQ to sort your result. Since, in many cases, ordering occurs last in the query (everything is joined/filtered then turned into a list first) the performance impact could be lower. However it won't work for complex (or chained) queries. YMMV. Sebastien p.s. please fill bug reports when you find such issues. We do keep the test cases in our test suite and if whenever we want to try potential fixes we can run them thru all the test cases we are provided. [1] https://bugzilla.xamarin.com/show_bug.cgi?id=3627 [2] http://docs.xamarin.com/ios/about/limitations > On Thu, Mar 1, 2012 at 12:39 PM, Dan Miser <danmi...@gmail.com> wrote: >> >> Hi Rodrigo, >> >> Any thoughts on something I can try? Thanks >> >> Sent from my iPhone >> >> On Feb 29, 2012, at 1:41 PM, Rodrigo Kumpera <kump...@xamarin.com> wrote: >> >> Oh, sorry, OrderedEnumerable is an internal framework class, this >> work-around won't help you. >> >> I'll ask the team of other options. >> >> >> On Wed, Feb 29, 2012 at 3:27 PM, Dan Miser <danmi...@gmail.com> wrote: >>> >>> That doesn't compile. There is no OrderedEnumerable class that I can >>> find. Just the interface. Changing it to the interface also doesnt compile. >>> I put the code in my Main.cs class. >>> >>> Any idea where I'm going wrong? >>> >>> Sent from my iPhone >>> >>> On Feb 29, 2012, at 11:48 AM, Rodrigo Kumpera <kump...@xamarin.com> >>> wrote: >>> >>> Hi, >>> >>> As simple workaround while we figure out how to fix it add a static >>> method to you App class with the following: >>> >>> static void LinqWorkAround () { >>> System.Linq.OrderedEnumerable<Foo>.CreateOrderedEnumerable<int> (null, >>> null, false); >>> } >>> >>> This should take care of this crash. If you're building your project with >>> user code linking enabled, >>> make sure to have this method called during initialization, something >>> like this: >>> >>> static bool dummy = false; >>> >>> static void main () { >>> >>> if (dummy) LinqWorkAround (); >>> } >>> >>> >>> >>> On Wed, Feb 29, 2012 at 2:24 PM, danmiser <danmi...@gmail.com> wrote: >>>> >>>> I've searched through this group, StackOverflow, and the MT bugzilla >>>> list. >>>> There are a lot of mentions about this, but I'm having a hard time >>>> finding >>>> an authoritative answer. Assume the following code: >>>> >>>> var list = new List<Foo>(); >>>> list.Add (new Foo { Id = 3, Name="def"}); >>>> list.Add (new Foo { Id = 2, Name="def"}); >>>> list.Add (new Foo { Id = 1, Name="ggg"}); >>>> var x = from l in list orderby l.Name, l.Id select l; >>>> foreach (var item in x) { ... do something ... } >>>> >>>> public class Foo { >>>> public int Id { get; set; } >>>> public string Name { get; set; } >>>> } >>>> >>>> When running on the device, I get the info pasted below. >>>> >>>> Notes: >>>> 1. This only fails on the device >>>> 2. It doesn't fail if you just have one orderby item >>>> >>>> I have a lot of LINQ in my POCO classes, and I wouldn't relish the idea >>>> of >>>> unwinding it all. >>>> >>>> What do I need to do to make this work? >>>> >>>> Unhandled Exception: System.ExecutionEngineException: Attempting to JIT >>>> compile method >>>> 'System.Linq.OrderedEnumerable`1<Foo>:CreateOrderedEnumerable<int> >>>> (System.Func`2<Foo, >>>> int>,System.Collections.Generic.IComparer`1<int>,bool)' >>>> while running with --aot-only. >>>> >>>> at System.Linq.Enumerable.ThenBy[Foo,Int32] (IOrderedEnumerable`1 >>>> source, >>>> System.Func`2 keySelector, IComparer`1 comparer) [0x00007] in >>>> >>>> /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System.Linq/Enumerable.cs:2787 >>>> at System.Linq.Enumerable.ThenBy[Foo,Int32] (IOrderedEnumerable`1 >>>> source, >>>> System.Func`2 keySelector) [0x00000] in >>>> >>>> /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System.Linq/Enumerable.cs:2779 >>>> at TestLibrary.HelloContext.List () [0x00006] in >>>> /Users/danmiser/code/MonoTouchRestDemo/TestLibrary/MyClass.cs:18 >>>> at MonoTouchRestDemo.MonoTouchRestDemoViewController.<ViewDidLoad>m__0 >>>> (System.Object sender, System.EventArgs e) [0x00006] in >>>> >>>> /Users/danmiser/code/MonoTouchRestDemo/MonoTouchRestDemo/MonoTouchRestDemoViewController.cs:38 >>>> at MonoTouch.UIKit.UIControlEventProxy.Activated () [0x00000] in >>>> /Developer/MonoTouch/Source/monotouch/src/UIKit/UIControl.cs:30 >>>> at MonoTouch.UIKit.UIApplication.Main (System.String[] args, >>>> System.String >>>> principalClassName, System.String delegateClassName) [0x00042] in >>>> /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:29 >>>> at MonoTouchRestDemo.Application.Main (System.String[] args) [0x00000] >>>> in >>>> /Users/danmiser/code/MonoTouchRestDemo/MonoTouchRestDemo/Main.cs:16 >>>> [ERROR] FATAL UNHANDLED EXCEPTION: System.ExecutionEngineException: >>>> Attempting to JIT compile method >>>> >>>> 'System.Linq.OrderedEnumerable`1<TestLibrary.HelloClone>:CreateOrderedEnumerable<int> >>>> (System.Func`2<TestLibrary.HelloClone, >>>> int>,System.Collections.Generic.IComparer`1<int>,bool)' while running >>>> with >>>> --aot-only. >>>> >>>> at System.Linq.Enumerable.ThenBy[Foo,Int32] (IOrderedEnumerable`1 >>>> source, >>>> System.Func`2 keySelector, IComparer`1 comparer) [0x00007] in >>>> >>>> /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System.Linq/Enumerable.cs:2787 >>>> at System.Linq.Enumerable.ThenBy[Foo,Int32] (IOrderedEnumerable`1 >>>> source, >>>> System.Func`2 keySelector) [0x00000] in >>>> >>>> /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System.Linq/Enumerable.cs:2779 >>>> at TestLibrary.HelloContext.List () [0x00006] in >>>> /Users/danmiser/code/MonoTouchRestDemo/TestLibrary/MyClass.cs:18 >>>> at MonoTouchRestDemo.MonoTouchRestDemoViewController.<ViewDidLoad>m__0 >>>> (System.Object sender, System.EventArgs e) [0x00006] in >>>> >>>> /Users/danmiser/code/MonoTouchRestDemo/MonoTouchRestDemo/MonoTouchRestDemoViewController.cs:38 >>>> at MonoTouch.UIKit.UIControlEventProxy.Activated () [0x00000] in >>>> /Developer/MonoTouch/Source/monotouch/src/UIKit/UIControl.cs:30 >>>> at MonoTouch.UIKit.UIApplication.Main (System.String[] args, >>>> System.String >>>> principalClassName, System.String delegateClassName) [0x00042] in >>>> /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:29 >>>> at MonoTouchRestDemo.Application.Main (System.String[] args) [0x00000] >>>> in >>>> /Users/danmiser/code/MonoTouchRestDemo/MonoTouchRestDemo/Main.cs:16 >>>> Terminating runtime due to unhandled exception >>>> Stacktrace: >>>> >>>> >>>> Native stacktrace: >>>> >>>> 0 MonoTouchRestDemo 0x01616970 >>>> mono_handle_native_sigsegv + 280 >>>> 1 MonoTouchRestDemo 0x016396c4 >>>> sigabrt_signal_handler + >>>> 180 >>>> 2 libsystem_c.dylib 0x331b6539 _sigtramp + 48 >>>> 3 libsystem_c.dylib 0x331abf5b pthread_kill + >>>> 54 >>>> 4 libsystem_c.dylib 0x331a4feb abort + 94 >>>> 5 MonoTouchRestDemo 0x016f2774 monoeg_g_logv >>>> + 152 >>>> 6 MonoTouchRestDemo 0x016f27c0 >>>> monoeg_assertion_message >>>> + 52 >>>> 7 MonoTouchRestDemo 0x01600348 >>>> mono_thread_abort + 148 >>>> 8 MonoTouchRestDemo 0x0161653c >>>> mono_handle_exception_internal + 3188 >>>> 9 MonoTouchRestDemo 0x01616740 >>>> mono_handle_exception + >>>> 24 >>>> 10 MonoTouchRestDemo 0x016382d8 >>>> mono_arm_throw_exception >>>> + 172 >>>> 11 MonoTouchRestDemo 0x005c361c >>>> throw_exception + 48 >>>> 12 MonoTouchRestDemo 0x01602910 >>>> mono_jit_compile_method >>>> + 68 >>>> 13 MonoTouchRestDemo 0x016a9ed8 >>>> mono_compile_method + 56 >>>> 14 MonoTouchRestDemo 0x01619d10 >>>> common_call_trampoline + >>>> 1364 >>>> 15 MonoTouchRestDemo 0x01617de4 >>>> mono_vcall_trampoline + >>>> 228 >>>> 16 MonoTouchRestDemo 0x005c3528 >>>> generic_trampoline_vcall >>>> + 136 >>>> 17 MonoTouchRestDemo 0x003b1c5c >>>> >>>> System_Linq_Enumerable_ThenBy_TestLibrary_HelloClone_int_System_Linq_IOrderedEnumerable_1_TestLibrary_HelloClone_System_Func_2_TestLibrary_HelloClone_int >>>> + 144 >>>> 18 MonoTouchRestDemo 0x003b0ca0 >>>> TestLibrary_HelloContext_List + 512 >>>> 19 MonoTouchRestDemo 0x006a9d34 >>>> >>>> MonoTouchRestDemo_MonoTouchRestDemoViewController__ViewDidLoadm__0_object_System_EventArgs >>>> + 300 >>>> 20 MonoTouchRestDemo 0x0000edcc >>>> MonoTouch_UIKit_UIControlEventProxy_Activated + 68 >>>> 21 MonoTouchRestDemo 0x0057c188 >>>> >>>> wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr >>>> + 200 >>>> 22 MonoTouchRestDemo 0x01602fbc >>>> mono_jit_runtime_invoke >>>> + 1644 >>>> 23 MonoTouchRestDemo 0x016ab43c >>>> mono_runtime_invoke + >>>> 128 >>>> 24 MonoTouchRestDemo 0x01707b54 >>>> monotouch_trampoline + >>>> 3228 >>>> 25 CoreFoundation 0x34321435 -[NSObject >>>> performSelector:withObject:withObject:] + 52 >>>> 26 UIKit 0x3778b9eb >>>> -[UIApplication >>>> sendAction:to:from:forEvent:] + 62 >>>> 27 UIKit 0x3778b9a7 >>>> -[UIApplication >>>> sendAction:toTarget:fromSender:forEvent:] + 30 >>>> 28 UIKit 0x3778b985 -[UIControl >>>> sendAction:to:forEvent:] + 44 >>>> 29 UIKit 0x3778b6f5 >>>> -[UIControl(Internal) >>>> _sendActionsForEvents:withEvent:] + 492 >>>> 30 UIKit 0x3778c02d -[UIControl >>>> touchesEnded:withEvent:] + 476 >>>> 31 UIKit 0x3778a50f -[UIWindow >>>> _sendTouchesForEvent:] + 318 >>>> 32 UIKit 0x37789f01 -[UIWindow >>>> sendEvent:] + >>>> 380 >>>> 33 UIKit 0x377704ed >>>> -[UIApplication >>>> sendEvent:] + 356 >>>> 34 UIKit 0x3776fd2d >>>> _UIApplicationHandleEvent + 5808 >>>> 35 GraphicsServices 0x30ba2df3 >>>> PurpleEventCallback + >>>> 882 >>>> 36 CoreFoundation 0x3439b553 >>>> __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 38 >>>> 37 CoreFoundation 0x3439b4f5 >>>> __CFRunLoopDoSource1 + >>>> 140 >>>> 38 CoreFoundation 0x3439a343 __CFRunLoopRun >>>> + 1370 >>>> 39 CoreFoundation 0x3431d4dd >>>> CFRunLoopRunSpecific + >>>> 300 >>>> 40 CoreFoundation 0x3431d3a5 >>>> CFRunLoopRunInMode + 104 >>>> 41 GraphicsServices 0x30ba1fcd >>>> GSEventRunModal + 156 >>>> 42 UIKit 0x3779e743 >>>> UIApplicationMain + 1090 >>>> 43 MonoTouchRestDemo 0x00026cfc >>>> >>>> wrapper_managed_to_native_MonoTouch_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr >>>> + 240 >>>> 44 MonoTouchRestDemo 0x006a8f20 >>>> MonoTouchRestDemo_Application_Main_string__ + 152 >>>> 45 MonoTouchRestDemo 0x0057c188 >>>> >>>> wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr >>>> + 200 >>>> 46 MonoTouchRestDemo 0x01602fbc >>>> mono_jit_runtime_invoke >>>> + 1644 >>>> 47 MonoTouchRestDemo 0x016ab43c >>>> mono_runtime_invoke + >>>> 128 >>>> 48 MonoTouchRestDemo 0x016af6e8 >>>> mono_runtime_exec_main + >>>> 436 >>>> 49 MonoTouchRestDemo 0x016b435c >>>> mono_runtime_run_main + >>>> 756 >>>> 50 MonoTouchRestDemo 0x01607344 mono_jit_exec >>>> + 140 >>>> 51 MonoTouchRestDemo 0x015ff550 main + 2168 >>>> 52 MonoTouchRestDemo 0x00002504 start + 52 >>>> >>>> -- >>>> View this message in context: >>>> http://monotouch.2284126.n4.nabble.com/LINQ-and-OrderBy-again-tp4432245p4432245.html >>>> Sent from the MonoTouch mailing list archive at Nabble.com. >>>> _______________________________________________ >>>> MonoTouch mailing list >>>> MonoTouch@lists.ximian.com >>>> http://lists.ximian.com/mailman/listinfo/monotouch >>> >>> >> > _______________________________________________ MonoTouch mailing list MonoTouch@lists.ximian.com http://lists.ximian.com/mailman/listinfo/monotouch