2010-11-01 10 views
0


Selon profiler il faut 24 secondes pour FluentConfiguration.BuildConfiguration pour compléter. Voici le code que j'utilise pour obtenir la configuration:Fluent NHIbernate gèle beaucoup

MsSqlConfiguration persistenceConfigurer = MsSqlConfiguration 
     .MsSql2005 
     .ConnectionString(connectionStringBuilder => connectionStringBuilder 
                 .Server(server) 
                 .Database(database) 
                 .Username(userName) 
                 .Password(password)) 
     .ProxyFactoryFactory<ProxyFactoryFactory>() 
     .CurrentSessionContext<ThreadStaticSessionContext>() 
     .DoNot.ShowSql(); 

FluentConfiguration cfg = Fluently.Configure() 
    .Database(persistenceConfigurer) 
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ExecutorMap>()); 

return cfg.BuildConfiguration(); 

Le nombre de fichiers de cartes-est 19. Est-il courant Fluent NHibernate de travailler si longtemps? Serait-ce ma faute? Quel pourrait être le problème?
Merci d'avance.

+0

Si quelqu'un d'autre s'intéresse à ce problème, il peut être utile de lire http://ayende.com/Blog/archive/2007/10/26/Real-World-NHibernate-Reducing-startup-times-for- large-of-of.aspx et http://nhforge.org/blogs/nhibernate/archive/2009/03/13/an-improvement-on-sessionfactory-initialization.aspx – StuffHappens

Répondre

2

Si vous utilisez un profileur, vous devriez être en mesure de voir quels appels à l'intérieur de BuildConfiguration prennent ce temps. Que sont-ils?

Le balayage d'assemblage serait ma conjecture. L'assemblage qui contient vos mappages est-il particulièrement volumineux? Vous avez demandé à Fluent NHibernate d'analyser votre assemblage à la recherche de mappages. Ainsi, peu importe le nombre de mappages, il doit toujours analyser l'intégralité de l'assemblage.

+0

Il ne semble pas que ce soit un scan d'assemblage. La fonction la plus longue à l'intérieur de BuildConfiguration est AddDocument (LoadMappingDocument + AddDocumentThroughQueue). L'assemblage n'est pas grand. Il contient uniquement des mappages et l'implémentation de référentiels (~ 35 classes). – StuffHappens

+0

'AddDocument' est une fonction NHibernate, qui n'est appelée que lorsque Fluent NHibernate a fini de compiler les mappages. Combien de fois est-ce que 'AddDocument' est appelé? Je m'attendrais à une ou 19 fois, selon votre configuration. –

+0

Vous avez raison. C'est une fuction de NHibernate. Ça s'appelle 19 fois. – StuffHappens