Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by [EMAIL PROTECTED]

http://bugzilla.ximian.com/show_bug.cgi?id=80391

--- shadow/80391        2006-12-28 21:57:25.000000000 -0500
+++ shadow/80391.tmp.10743      2006-12-28 21:57:25.000000000 -0500
@@ -0,0 +1,89 @@
+Bug#: 80391
+Product: Mono: Runtime
+Version: 1.0
+OS: other
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Normal
+Component: JIT
+AssignedTo: [EMAIL PROTECTED]                            
+ReportedBy: [EMAIL PROTECTED]               
+QAContact: [EMAIL PROTECTED]
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: Calling generic methods on interfaces is very slow
+
+Calling generic methods on interfaces is very slow, code to reproduce:
+
+using System;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+
+class vbnc_bugs {
+       interface iface {
+               void method<T> ();
+       }
+       class test : iface  {
+               public void method<T> () { }
+       }
+       static void Main (string [] args)
+       {
+               int iterations = 100000;
+               DateTime start;
+               TimeSpan t1, t2;
+               test tester = new test ();
+               iface itester = tester;
+               
+               if (args.Length == 1)
+                       iterations = int.Parse (args [0]);
+               
+               start = DateTime.Now;
+               for (int i = 0; i < iterations; i++) {
+                       itester.method <object> ();
+               }
+               t1 = DateTime.Now - start;
+
+               start = DateTime.Now;
+               for (int i = 0; i < iterations; i++) {
+                       tester.method <object> ();
+               }
+               t2 = DateTime.Now - start;
+
+               Console.WriteLine ("{0} iterations, with generics {1} ms, 
+without {2} ms", iterations, (int) t1.TotalMilliseconds, (int) 
+t2.TotalMilliseconds);
+       }
+}
+
+Some benchmarks:
+MS:
+1000 iterations, with generics 0 ms, without 0 ms
+10000 iterations, with generics 0 ms, without 0 ms
+100000 iterations, with generics 0 ms, without 0 ms
+1000000 iterations, with generics 15 ms, without 15 ms
+10000000 iterations, with generics 250 ms, without 62 ms
+100000000 iterations, with generics 2765 ms, without 828 ms
+
+1000 iterations, with generics 24 ms, without 0 ms
+10000 iterations, with generics 177 ms, without 0 ms
+100000 iterations, with generics 4687 ms, without 0 ms
+1000000 iterations, c-c'ed after a long wait.
+
+If I debug with gdb and c-c, I'll almost always get this stack trace:
+#0  0xb7e1518d in memmove () from /lib/libc.so.6
+#1  0xb7f178a9 in g_array_insert_vals () from /opt/gnome/lib/libglib-
+2.0.so.0
+#2  0x08097dde in mono_jit_info_table_add (domain=0x21ed8, ji=0x8eca5b4) 
+at domain.c:220
+#3  0x08155f3c in mini_method_compile (method=0x8ed4cf8, opts=5335551, 
+domain=0x21ed8, run_cctors=<value optimized out>, compile_aot=<value 
+optimized out>, parts=0) at mini.c:10461
+#4  0x08156651 in mono_jit_compile_method (method=0x8ed4cf8) at 
+mini.c:10559
+#5  0x08157231 in mono_helper_compile_generic_method (obj=0x2ffe8, 
+method=0x826b918, context=0x826b8e8, this_arg=0xbfbbc20c) at jit-
+icalls.c:804
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to