Я использую Nhibernate в качестве инструмента OR / M для приложения asp.net, и производительность при запуске действительно расстраивает. Отчасти проблема заключается во мне из-за недостатка понимания, но я постарался изрядно (понимание определенно улучшается) и до сих пор ни к чему не привел.
В настоящее время профилировщик ANTS считает, что Configure () занимает 13-18 секунд, а BuildSessionFActory () - около 5 секунд. Из того, что я прочитал, на самом деле эти времена могут быть довольно хорошими, но в целом они говорили о сотнях и сотнях отображенных объектов ... у этого проекта всего 10.
Я объединил все файлы сопоставления в один файл сопоставления hbm, и это улучшило ситуацию, но только до времени, упомянутого выше ...
Полагаю, есть ли какие-нибудь "ловушки для молодых игроков", которые регулярно пропускаются ... очевидно "Я сделал это / ты включил / исключил файл x / пометил файл y как z" и т.д. ...
Я попытаюсь сериализовать конфигурацию, чтобы избежать этапа Configure (), но я чувствую, что эта часть не должна быть такой длинной для такого количества объектов и поэтому по существу скрывала бы текущую проблему ...
Я опубликую исходный код или конфигурацию, если необходимо, но я не уверен, что вставить в действительности ...
спасибо, куча!
редактировать (подробнее)
Я также добавлю, что, как только это будет завершено, каждая страница будет чрезвычайно быстрой ...
код конфигурации - 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>
Мой класс SessionManager, который связан и не связан в HttpModule для каждого запроса
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
редактировать 2 (результаты log4net)
опубликует биты, у которых есть доля времени между ними, и вырежет остальные ...
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