[Mono-list] Advice on optimisation in xml deserialisation

Alan McGovern alan.mcgovern at gmail.com
Wed Jan 9 22:26:45 EST 2008


(and to the list again... doh)

On Jan 10, 2008 3:26 AM, Alan McGovern <alan.mcgovern at gmail.com> wrote:
> Hi,
>
> Yeah, by reducing the method searchs performance increases by 15% or
> so. I'll work that patch up tomorrow at some stage.
>
> Thanks,
> Alan.
>
>
> On Jan 10, 2008 1:07 AM, Robert Jordan <robertj at gmx.net> wrote:
> > Hi,
> >
> > I've filed it:
> >
> >         https://bugzilla.novell.com/show_bug.cgi?id=352805
> >
> > BTW, the "previousObject" check in your patch is still useful,
> > as it cuts down the type.GetMethod ("Add") calls from
> > collectionLength to 1, if I understand the patch correctly.
> >
> > Just remove the CreateDelegate stuff and extend the optimization
> > to cover NET 1.1 as well.
> >
> > Robert
> >
> >
> >
> > Alan McGovern wrote:
> > > (and also sending to the list...)
> > >
> > > On Jan 10, 2008 12:41 AM, Alan McGovern <alan.mcgovern at gmail.com> wrote:
> > >> Hi,
> > >>
> > >> I was wondering about that alright. It did seem a bit weird that it
> > >> would work, i would've expected the delegate parameter to be at least
> > >> as restrictive as the method i was calling. Bang goes that idea then.
> > >>
> > >> Alan.
> > >>
> > >>
> > >> On Jan 10, 2008 12:36 AM, Robert Jordan <robertj at gmx.net> wrote:
> > >>> Robert Jordan wrote:
> > >>>> Alan McGovern wrote:
> > >>>>> There was a thread a week or two ago called 'Speed difference Windows
> > >>>>> - Linux' which noted there was a big difference in performance between
> > >>>>> .NET and mono. I did a brief bit of profiling and came up with this
> > >>>>> patch which improves performance ~30% for the testcase which was
> > >>>>> attached in the email. This reduces runtime memory usage by about 10MB
> > >>>>> (80MB -> 70MB) and decreases processing time by 30% (3.4s -> 2.6s).
> > >>>>>
> > >>>>> Anyone have any ideas on how to tidy this up to make it neater? Also,
> > >>>>> would this optimisation be too specific, or can it be generalised
> > >>>>> somewhere higher up in the stack.
> > >>>> I don't think the patch is correct. It is assuming that every
> > >>>> "Add" method of a collection/list is compatible with
> > >>>> AddDelegate(object).
> > >>>>
> > >>>> If the test cases are still working, it could be that
> > >>>> CreateDelegate is buggy: MSDN states:
> > >>>>
> > >>>> "A parameter of a delegate is compatible with the corresponding
> > >>>> parameter of a method if the type of the delegate parameter is more
> > >>>> restrictive than the type of the method parameter, because this
> > >>>> guarantees that an argument passed to the delegate can be passed safely
> > >>>> to the method."
> > >>> It's indeed a bug in Mono's CreateDelegate. The following test case
> > >>> must fail but it doesn't:
> > >>>
> > >>> using System;
> > >>>
> > >>> delegate void Method(object o);
> > >>>
> > >>> class T
> > >>> {
> > >>>         static void Main ()
> > >>>         {
> > >>>                 T t = new T ();
> > >>>                 Method m = (Method) Delegate.CreateDelegate (typeof(Method), t,
> > >>> t.GetType ().GetMethod ("Test"));
> > >>>                 m (new Uri ("http://mono-project.com"));
> > >>>         }
> > >>>
> > >>>         public void Test (Uri uri)
> > >>>         {
> > >>>                 Console.WriteLine (uri);
> > >>>
> > >>>         }
> > >>> }
> > >>>
> > >>> Robert
> > >>>
> > >>> _______________________________________________
> > >>> Mono-list maillist  -  Mono-list at lists.ximian.com
> > >>> http://lists.ximian.com/mailman/listinfo/mono-list
> > >>>
> > > _______________________________________________
> > > Mono-list maillist  -  Mono-list at lists.ximian.com
> > > http://lists.ximian.com/mailman/listinfo/mono-list
> > >
> >
> >
>


More information about the Mono-list mailing list