J'écris même requête avec approche à deux en utilisant NHibernate:Lequel a de meilleures performances?
1- en utilisant HQL
comme ci-dessous
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- en utilisant ICriteria
et SetProjections
comme ci-dessous
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;
}
}
Ma question est celui qui a une meilleure performance? Pourquoi?
Avez-vous mesuré les performances des deux? Qu'est-ce que cela vous a dit? –
Avez-vous essayé de voir quel sql ils font tous les deux avec NHProf? Si le SQL est le même que la performance devrait être similaire. – chrissie1
@Binary Worrier: avec mes données, HQl = 311.72 ms et ICriteria = 281.008 ms. HQL convertit en ICriteria, est-ce vrai? –