2010-11-26 20 views
10

ile uzun sürecek uzun sürüyor Bu sorguyu 7 satır döndürür ve veritabanında 4ms alır ancak 1075 ms örneğini alır. Bu, zamanların yalnızca bir örneğidir ve nesneler üzerinde değişiklik gösterir, ancak çok uzun sürmesi mantıklı görünmez. Hızın nasıl artırılacağına dair herhangi bir işaret var mı?Liste <int> Nhibernate Criteria

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 sorgusu herhangi bir yardım takdir

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 */) 

oluşturulur. Teşekkürler

+0

buna çalıştırılan bu uzun her zaman ya da sadece ilk sürüyor mudur ? Hangi bayt kod üretecini kullanıyorsunuz? – jonnii

+0

@jonnii, Her seferinde uzun zaman alır. Ayrıca bayt kodu NHibernate.ByteCode.Castle'dir. – Gage

+0

@Girişi IEnumerable yerine IEnumerable döndürdüğünüzde ve List()? – jonnii

cevap

5

Görünüşe göre yavaşlatan şey SetParameterList çağrısıydı. SQL'i biçimlendirdiğimde, 8ms veritabanı ve 485ms örnekleme çizgisi boyunca bir şey elde edemiyorum, ki bu kabul edilebilir. Daha hızlı bir şey yapmak isterdim ama bu şimdilik yapacak. İşte

Şu anda kod kullanıyorum edilir:

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; 
+0

hangi NH sürümünü kullanıyorsunuz? – Jaguar

+0

@Jaguar, 2.1.2.4000 – Gage

+0

garip. SetParameterList'i çeşitli senaryolarda ve türlerde kullandım, daha önce hiç görülmedim. UpstreamStations int [] veya başka bir şey miydi? – Jaguar