Низкая производительность выборки в NHibernate (даже при быстром запросе)

У меня проблемы с производительностью NHibernate, собирающей около 18 000 объектов. Сам запрос занимает менее 1 секунды, однако общее время обработки составляет более 30 секунд.

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

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

Вот это отображение:

<class name="Referencia" polymorphism="explicit" table="SPCO.dbo.vSPCO_Referencias">
 <composite-id>
  <key-property name="IdArticulo"/>
  <key-property name="IdColor" column="P1"/>
 </composite-id>
 <discriminator type="string" column="TipoReferencia"/>
 <property name="Tipo" column="TipoReferencia"/>
 <many-to-one name="Articulo" class="Articulo" column="IdArticulo" update="false" insert="false"/>
 [...]
</class>

<class name="Articulo" table="SPCO.dbo.vSPCO_Articulos" polymorphism="explicit">
 <id name="Id" column="IdArticulo"/>
 <discriminator type="string" column="TipoArticulo"/>
 <many-to-one name="Familias" column="IdArticulo" update="false" insert="false"/>
 [...]
</class>

<class name="ArticuloFamilias" table="SPCO.dbo.vSPCO_Articulos_Familias">
 <id name="IdArticulo" column="IdArticulo"/>
 <property name="TipoProductoNp" update="false" insert="false"/>
</class>

Метод запроса (Mercaderia является производным классом от Referencia):

 return StatelessSession.QueryOver<Mercaderia>()
            .JoinQueryOver(a => a.Articulo)
            .JoinQueryOver(a => a.Familias)
            .Where(f => f.TipoProductoNp == tipo)
            .List();

И тест от NHibernate Profiler:

введите описание изображения здесь

0 ответов

Другие вопросы по тегам