Estoy usando Nhibernate como la herramienta OR/M para una aplicación asp.net y el rendimiento de inicio es realmente frustrante. Parte del problema es definitivamente yo en mi falta de comprensión, pero lo he intentado un poco (la comprensión definitivamente está mejorando) y todavía estoy llegando a ninguna parte.nhibernate configure y buildsessionfactory time
Actualmente, el generador de perfiles de ANTS tiene que Configurar() tarda de 13 a 18 segundos y BuildSessionFActory() tarda unos 5 segundos. Por lo que he leído, estos tiempos en realidad podrían ser bastante buenos, pero en general estaban hablando de cientos y cientos de entidades mapeadas ... este proyecto solo tiene 10.
He combinado todos los archivos de mapeo en un solo archivo de mapeo hbm y esto mejoró las cosas pero solo hasta los tiempos mencionados anteriormente ...
Supongo que hay "trampas para jugadores jóvenes" que se pierden con frecuencia ... obvio "Hice esto/tengo habilitó ese archivo/exclude archivo x/marca y como z "etc ...
Voy a tratar de serializar la configuración para evitar la etapa Configure(), pero creo que esa parte no debería ser tan larga para esa cantidad de entidades y así woul d esencialmente se esconde un problema actual ...
Voy a publicar el código fuente o la configuración si es necesario, pero no estoy seguro de qué poner en serio ...
montones de las gracias!
edición (más información)
También añadiremos que una vez que se termine esto, cada página es extremadamente rápido ...
configuración código- hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="hibernate-configuration"
type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string_name">MyAppDEV</property>
<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<property name="cache.use_second_level_cache">true</property>
<property name="show_sql">false</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name="current_session_context_class">managed_web</property>
<mapping assembly="MyApp.Domain"/>
</session-factory>
</hibernate-configuration>
</configuration>
Mi clase SessionManager que está unido y no unido en un HttpModule para cada solicitud
Imports NHibernate
Imports NHibernate.Cfg
Public Class SessionManager
Private ReadOnly _sessionFactory As ISessionFactory
Public Shared ReadOnly Property SessionFactory() As ISessionFactory
Get
Return Instance._sessionFactory
End Get
End Property
Private Function GetSessionFactory() As ISessionFactory
Return _sessionFactory
End Function
Public Shared ReadOnly Property Instance() As SessionManager
Get
Return NestedSessionManager.theSessionManager
End Get
End Property
Public Shared Function OpenSession() As ISession
Return Instance.GetSessionFactory().OpenSession()
End Function
Public Shared ReadOnly Property CurrentSession() As ISession
Get
Return Instance.GetSessionFactory().GetCurrentSession()
End Get
End Property
Private Sub New()
Dim configuration As Configuration = New Configuration().Configure()
_sessionFactory = configuration.BuildSessionFactory()
End Sub
Private Class NestedSessionManager
Friend Shared ReadOnly theSessionManager As New SessionManager()
End Class
End Class
EDIT 2 (resultados log4net)
a publicar bits que tienen una porción de tiempo entre ellos y se desconectará el resto ...
2010-03-30 23:29:40,898 [4] INFO NHibernate.Cfg.Environment [(null)] - Using reflection optimizer
2010-03-30 23:29:42,481 [4] DEBUG NHibernate.Cfg.Configuration [(null)] - dialect=NHibernate.Dialect.MsSql2005Dialect
...
2010-03-30 23:29:42,501 [4] INFO NHibernate.Cfg.Configuration [(null)] - Mapping resource: MyApp.Domain.Mappings.hbm.xml
2010-03-30 23:29:43,342 [4] INFO NHibernate.Dialect.Dialect [(null)] - Using dialect: NHibernate.Dialect.MsSql2005Dialect
2010-03-30 23:29:50,462 [4] INFO NHibernate.Cfg.XmlHbmBinding.Binder [(null)] - Mapping class:
...
2010-03-30 23:29:51,353 [4] DEBUG NHibernate.Connection.DriverConnectionProvider [(null)] - Obtaining IDbConnection from Driver
2010-03-30 23:29:53,136 [4] DEBUG NHibernate.Connection.ConnectionProvider [(null)] - Closing connection
Por favor, publique su código de configuración. Esos tiempos de inicio son mucho más largos que cualquier cosa que haya experimentado. –
Sí, definitivamente hay algo mal allí!Sin embargo, como dijo Jamie, probablemente necesitarás publicar el código de configuración para obtener ayuda útil. – UpTheCreek
Una cosa que podría querer hacer es configurar log4net para que pueda revisar el registro nhibernate – UpTheCreek