chemistry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Florian Müller <f...@apache.org>
Subject Re: FW: DotCMIS XmlElement Deserialisation Very Slow
Date Sat, 28 Sep 2013 15:52:32 GMT
Hi Phil,

Thanks for sharing your fix!
A similar code change is already in trunk [1]. See also issue CMIS-657 [2].


Cheers,

Florian


[1]
https://svn.apache.org/viewvc/chemistry/dotcmis/trunk/DotCMIS/binding/converter.cs?revision=1510195&view=markup#l112
[2] https://issues.apache.org/jira/browse/CMIS-657


> Resent as a mail, don’t know why I “posted” this...or if it makes any
> difference.
> 
>  
> 
> *From:*Philip Barr
> *Posted At:* 27 September 2013 17:20
> *Posted To:* Apache Chemistry
> *Conversation:* DotCMIS XmlElement Deserialisation Very Slow
> *Subject:* DotCMIS XmlElement Deserialisation Very Slow
> 
>  
> 
> Hi all,
> 
>  
> 
> The following method in converter.cs, line 112, currently creates  a new
> XmlSerialiser for each invocation. This is very costly and when there
> are, for example, lots of Choice elements in an aspect (which is how I
> noticed it, performance slipped to 16-17 seconds for an
> ISession.GetTypeDefinition() call):
> 
>  
> 
> T DeserializeElement<T>(XmlElement element)
> 
>  
> 
> I think this should be changed to the following:
> 
>         private static readonly Dictionary<Type, XmlSerializer>
> xmlSerializerCache = new Dictionary<Type, XmlSerializer>();
> 
>  
> 
>         ///<summary>
> 
>         ///Deserializes an elemenet.
> 
>         ///</summary>
> 
>         private static T DeserializeElement<T>(XmlElement element)
> 
>         {
> 
>             if (!xmlSerializerCache.ContainsKey(typeof(T)))
> 
>             {
> 
>                 XmlRootAttribute xmlRoot = new
> XmlRootAttribute(element.LocalName);
> 
>                 xmlRoot.Namespace = CMISNamespaceURI;
> 
>                 XmlSerializer xmlSerializer = new
> XmlSerializer(typeof(T), xmlRoot);
> 
>                 xmlSerializerCache.Add(typeof(T),
> xmlSerializer);               
> 
>             }
> 
>  
> 
>             T deserializeElement =
> (T)xmlSerializerCache[typeof(T)].Deserialize(new XmlNodeReader(element));
> 
>  
> 
>             return deserializeElement;
> 
>         }
> 
>  
> 
> Doing this sped things up significantly for me.
> 
>  
> 
> Cheers,
> 
> Phil.
> 
>  
> 
> Philip Barr |Head Of Development |SynApps Solutions Ltd
> <http://www.synapps-solutions.com/>.
> 
> mobile: +44 (0)7817556362 | skype: phil.barr
> 
> email: philip.barr@synapps-solutions.com
> <mailto:richard.wiffin@synapps-solutions.com>
> 
> synapps-email-2.jpg <http://www.synapps-solutions.com/>
> 
> twitter.png <https://twitter.com/SynAppsSol>linkedin.png
> <http://www.linkedin.com/company/synapps-solutions-ltd>
> 
>  
> 
>  
> 
> *IMPORTANT NOTICE*
> 
> This e-mail contains information which is confidential and may be
> privileged and is for the exclusive use of the recipient. If you are not
> the named recipient please contact the sender immediately and delete the
> communication from your system. You are hereby notified that any
> disclosure, distribution or copying of this communication, in whole or
> in part, is strictly prohibited. It is the responsibility of the
> recipient to ensure that this message and its attachments are virus
> free. Any views or opinions presented are solely those of the author and
> do not necessarily represent those of the Company, its directors or
> officers unless otherwise specifically stated. The Company is not
> responsible for any reliance placed on the information contained herein
> and excludes all liability.
> 
> SynApps Solutions Limited is a company registered in England & Wales.
> Company Registration No.: 047702224. VAT No.: 823778892
> 

Mime
View raw message