Низкая производительность nHibernate на веб-сайте - PullRequest
3 голосов
/ 02 декабря 2008

У меня есть веб-приложение, размещаемое в общедоступной хостинговой компании, сайт еще не запущен, и я все еще тестирую его. Я использую nHibernate с Windsor Castle Container для внедрения зависимостей, и сайт, кажется, время от времени реагирует очень медленно. Я связался со службой поддержки, но они сказали, что это мое приложение, а не их серверы. У кого-нибудь были подобные проблемы с производительностью сайтов на базе ORM при размещении в публичных хостинговых компаниях?

Кроме того, какую хостинговую компанию вы бы порекомендовали для хостинга сайтов? Я попробовал godaddy, но не смог их использовать, потому что они не позволяют запускать сайт с полным доверием, что, по-видимому, требуется для nHibernate.


Я настроил nHibernate, используя файлы конфигурации xml, открывая сессии следующим образом:

using (ISession session = _sessionManager.OpenSession())
{         
ICriteria crit = session.CreateCriteria(typeof(Content));
   return crit.List();
}

Также в Application_Start у меня есть следующий код:

private static WindsorContainer container;
if (container == null)
   {
     container = new WindsorContainer(new XmlInterpreter(filePath));
      Application[Constant.CastleWindsorAppKey] = container;
    }

Ответы [ 3 ]

2 голосов
/ 02 декабря 2008

Вы не знаете, насколько медленно работает ваше приложение, когда вы его не измеряете. Во время разработки я использую временный http-модуль , чтобы быстро заметить большие проблемы с производительностью. Когда одна из ваших страниц загружается медленно, вы должны использовать профилировщик, чтобы найти точную горловину бутылки. Я использую NHibernate для своего текущего проекта, и у меня нет проблем с производительностью. Мои самые сложные запросы включают в себя сложный граф объектов из 10 различных классов, и их сопоставления NHibernate выполняются за 0,082 секунды. Основным узким местом в этом приложении является отображение html-шаблона aspx в ответ (это занимает 0,5 секунды). Проблемы с производительностью часто связаны с доступом к данным, но вы не можете быть уверены, если не будете измерять его.

1 голос
/ 02 декабря 2008

Без каких-либо контрольно-измерительных приборов вы просто угадываете. Вы должны обернуть синхронизирующий прокси вокруг ваших вызовов БД. Затем запишите, сколько времени занимает каждый звонок. Если именно здесь ваше время тратится, у вас есть информация, необходимая для продолжения.

0 голосов
/ 02 декабря 2008

Если вы используете среду общего хостинга, это, вероятно, не ваше приложение. Я видел, как отлично работает код на остановке на общем хосте. Единственное решение, которое я знаю для проблем с общим хостингом, - это какой-то хост управляемого приложения, получение виртуального частного сервера (управляемого или нет) или выделенного сервера. Этот тип услуг дороже, чем виртуальный хостинг.

Что касается рекомендаций по размещению для Windows, извините, что у меня их нет.

...