сессионный завод с многопоточностью - PullRequest
0 голосов
/ 31 января 2012

Можно ли создать мини-фабрику сессий с несколькими классами в одном потоке, а затем и создать полную фабрику сессий во втором потоке?

Я хочу ускорить инициализацию сессионной фабрики

Можете показать как это сделать?

1 Ответ

1 голос
/ 31 января 2012

Одним из способов ускорить запуск является сериализация объекта конфигурации, который занимает большую часть времени запуска для сборки и проверки, см. Здесь .

Код для реализации вашего подхода:

var minisessionfactory = Fluently.Configure()
    .DataBase(SomeConfiguration.Standard....)
    // only add the relevant mappings
    .Mapping(m => m.FluentMappings.Add<AMap>().Add<BMap>()...)
    .BuildSessionfactory();

ThreadPool.QueueUserWorkItem(state =>
{
    RealSessionFactory = Fluently.Configure()
        .DataBase(SomeConfiguration.Standard....)
        // only add the relevant mappings
        .Mapping(m => ...)
        .BuildSessionfactory();
    SessionFactoryReady = true;
});

// do some Stuff with minisessionfactory

Обновление:

Вы измерили, где на самом деле тратится время: построение конфигурации или сборка фабрики?

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

UpdateUpdate: простые реализации

ISession GetSession()
{
    while (!SessionFactoryReady) Thread.Sleep(1000);
    return RealSessionFactory.OpenSession();
}

// or

ISessionFactory SessionFactory
{
    get
    {
        while (!SessionFactoryReady) Thread.Sleep(1000);
        return RealSessionFactory;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...