Подтвердить что ты не робот

Список <int> занимает много времени, чтобы создать экземпляр с помощью критериев Nhibernate

У меня есть этот запрос, который возвращает 7 строк и занимает 4 мс в базе данных, но 1075 мс для создания экземпляра. Это всего лишь один пример времени, и он меняется на объекты, но, похоже, не имеет смысла, что это занимает так много времени. Любые указатели на то, как увеличить скорость?

var criteria =
                GetSession().CreateSQLQuery(
                    @"
                    select circt_id as CircuitId from normal_upstream
                        where dni_equip_type = 'A'

                        start with up_equip_stn_no in (:UpStationNo1)
                        connect by prior equip_stn_no = up_equip_stn_no
                        union
                        select circt_id as CircuitId
                        from normal_upstream 
                        where up_equip_stn_no in (:UpStationNo1)")
                    .AddScalar("CircuitId", NHibernateUtil.Int32).SetParameterList("UpStationNo1",upstreamStations)
                    .List<int>()

Созданный SQL-запрос

   select
     circt_id as CircuitId 
from normal_upstream

where dni_equip_type = 'A'

                            start with up_equip_stn_no in (
    'B' /* :p0 */)
                        connect by prior equip_stn_no = up_equip_stn_no
                        union
                        select
 circt_id as CircuitId
                        from normal_upstream       
where up_equip_stn_no in (
    'B' /* :p1 */)

Любая помощь приветствуется. Благодаря

4b9b3361

Ответ 1

По-видимому, замедление было вызвано вызовом SetParameterList. Когда я отформатирую SQL, прежде чем я получу что-то по строкам базы данных 8ms и экземпляра 485ms, что приемлемо. Я хотел бы иметь что-то более быстрое, но это будет делать сейчас.

Вот код, который я сейчас использую:

var sql =
            String.Format(
                @"select circt_id as CircuitId from normal_upstream
                where dni_equip_type = 'FDR_OCR'
                        start with up_equip_stn_no in ({0})
                        connect by prior equip_stn_no = up_equip_stn_no
                        union
                        select circt_id as CircuitId
                        from normal_upstream 
                        where up_equip_stn_no in ({0})",
                String.Join(",",upstreamStations.Select(x=>"'"+x+"'").ToArray()));
        var criteria =
            GetSession().CreateSQLQuery(sql)
                .AddScalar("CircuitId", NHibernateUtil.Int32)
                .List();
            return criteria;