я пишу тот же запрос с двумя подхода с использованием NHibernate:У кого лучше производительность?
1- используя HQL
как ниже
public long RetrieveHQLCount<T>(string propertyName, object propertyValue)
{
using (ISession session = m_SessionFactory.OpenSession())
{
long r = Convert.ToInt64(session.CreateQuery("select count(o) from " + typeof(T).Name + " as o" + " where o." + propertyName + " like '" + propertyValue + "%'").UniqueResult());
return r;
}
}
2- с использованием ICriteria
и SetProjections
как ниже
public long RetrieveCount<T>(string propertyName, object propertyValue)
{
using (ISession session = m_SessionFactory.OpenSession())
{
// Create a criteria object with the specified criteria
ICriteria criteria = session.CreateCriteria(typeof(T));
criteria.Add(Expression.InsensitiveLike(propertyName, propertyValue))
.SetProjection(Projections.Count(propertyName));
long count = Convert.ToInt64(criteria.UniqueResult());
// Set return value
return count;
}
}
Теперь мой вопрос это то, что имеет лучшую производительность? Зачем?
Вы оценили производительность обоих? Что это вам сказал? –
Вы пытались увидеть, что они делают с NHProf? Если SQL такой же, как и производительность, он должен быть схожим. – chrissie1
@ Бинарный Worrier: с моими данными, HQl = 311,72 мс и ICriteria = 281,008 мс. HQL превращается в ICriteria, правда? –