Oskar, If you want really gain time and your mappings are about classes (no dynamic entities) the best way to gain a lot of startup-time is using the new mapping-by-code API.
On Wed, Apr 20, 2011 at 3:16 PM, Oskar Berggren <[email protected]>wrote: > In a current project of mine, it takes about 4.8 seconds to configure > NHibernate and create the session factory. Of this, about 1.8 seconds > are the first (and only) instantiation of > XmlSerializer(typeof(HbmMapping)); in Configuration.cs. Timings are > measured with the Stopwatch class. > > I can create an NHibernate.XmlSerializers.dll with this incantation: > sgen /a:NHibernate.dll /t:NHibernate.Cfg.MappingSchema.HbmMapping > /force /compiler:/keyfile:NHibernate.snk > > With this assembly available, the time to instantiate > XmlSerializer(typeof(HbmMapping)); drops to only 7 ms, i.e. saving me > almost two seconds for application startup. (The 7 ms are probable > mostly IO and JIT - if a create the session factory again in the same > process, creating the XmlSerializer drops to less than 0.7 ms.) > > While generating NHibernate.XmlSerializers.dll is fairly easy, it > would perhaps be a good idea if the ordinary build procedure would do > this, and include it in the binary package? > > The fixed issue http://216.121.112.228/browse/NH-2425 speaks of > caching the XmlSerializer, and maybe that change was a good idea, but > I'm sceptical regarding if it made much of a difference, given the > numbers above. > > /Oskar > -- Fabio Maulo
