Свободное время медленного запуска - PullRequest
6 голосов
/ 08 декабря 2010

Я использую Fluent NHibernate и мне это нравится!У меня небольшая проблема: время запуска составляет около 10 секунд, и я не знаю, как оптимизировать Fluent nHibernate. Чтобы сделать это время запуска менее проблематичным, я поместил его в ветку.

Может кто-нибудь сказатьрешение этого?И ответьте с кодом, приведенным ниже, чтобы улучшить производительность?

Я видел что-то вроде этого: http://nhforge.org/blogs/nhibernate/archive/2009/03/13/an-improvement-on-sessionfactory-initialization.aspx, но я не знаю, как заставить это работать вместе с Fluent nHibernate.

Мой код такой:

public static ISession ObterSessao()        
{
        System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Highest;

        string ConnectionString = ConfigurationHelper.LeConfiguracaoWeb("EstoqueDBNet"); // My Connection string goes here

        var config = Fluently.Configure()
            .Database(FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard.ConnectionString(ConnectionString));

        config.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()));

        var session = config
            .BuildSessionFactory()
            .OpenSession();

        System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Normal;

        return session;
    }

Ответы [ 3 ]

5 голосов
/ 08 декабря 2010

Вам нужно собрать конфигурацию только один раз. В данный момент вы создаете новую конфигурацию каждый раз, когда получаете сеанс.

2 голосов
/ 08 декабря 2010

У Филла правильный ответ, но для дальнейшего рассмотрения взглянем на http://nhibernate.info/blog/2009/03/13/an-improvement-on-sessionfactory-initialization.html для сериализации конфигурации NHibernate в файл, поэтому вам не нужно перестраивать ее каждый раз при запуске приложения.,Это может или не может быть немного быстрее в зависимости от различных факторов (в основном, от количества отображений, которые у вас есть) - в соответствии с этим, Есть ли какие-либо данные о производительности запуска NHibernate против Fluent NHibernate?

Просто чтобы подчеркнуть (основываясь на некоторых ваших последующих qns в ответах-комментариях), вы должны сериализовать объект конфигурации (NHibernate.Cfg.), А не SessionFactory.

Затем вы используете Fluently.Configure(Configuration cfg)перегрузка для внедрения конфигурации при создании FluentConfiguration (вместо того, чтобы автоматически создавать ее для вас).

2 голосов
/ 08 декабря 2010

Прежде всего, не связывайтесь с приоритетом потока, если что-то из того, что вы делаете, сделает его медленнее.

Во-вторых, как сказал Фил, вам нужно кэшировать свой SessionFactory или выперестраивать конфигурацию каждый раз, когда вам нужен объект сеанса.

Вы можете сделать что-то подобное или переместить код в if в статический конструктор класса:

private static SessionFactory _factory = null;
public static ISession ObterSessao()        
{
    if(_factory == null) {
        string ConnectionString = ConfigurationHelper.LeConfiguracaoWeb("EstoqueDBNet"); // My Connection string goes here

        var config = Fluently.Configure()
            .Database(FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard.ConnectionString(ConnectionString));

        config.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()));

        _factory = config.BuildSessionFactory();
    }

    return _factory.OpenSession();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...