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

Reply via email to