[Mono-list] Advice on optimisation in xml deserialisation

Robert Jordan robertj at gmx.net
Wed Jan 9 20:07:13 EST 2008


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