Sono passati un paio di giorni che sto lavorando per migliorare le prestazioni di inserimento di NHibernate.Gli inserimenti della sessione senza stato di NHibernate sono lenti
avevo letto in molti posti (come ad esempio this one) che sessione senza può inserire come 1000 ~ 2000 record al secondo .... Tuttavia, il momento migliore che potrebbe inserire 1243 record è più di 9 secondi per me:
var sessionFactory = new NHibernateConfiguration().CreateSessionFactory();
using (IStatelessSession statelessSession = sessionFactory.OpenStatelessSession())
{
statelessSession.SetBatchSize(adjustmentValues.Count);
foreach (var adj in adjustmentValues)
statelessSession.Insert(adj);
}
la classe:
public partial class AdjustmentValue : PersistentObject, IFinancialValue
{
public virtual double Amount { get; set; }
public virtual bool HasManualValue { get; set; }
public virtual bool HasScaleValue { get; set; }
public virtual string Formula { get; set; }
public virtual DateTime IssueDate { get; set; }
public virtual CompanyTopic CompanyTopic { get; set; }
}
Mappa della classe:
public class AdjustmentValueMap : ClassMap<AdjustmentValue>
{
public AdjustmentValueMap()
{
Id(P => P.Id);
Map(p => p.Amount);
Map(p => p.IssueDate);
Map(p => p.HasManualValue);
Map(p => p.HasScaleValue);
Map(p => p.Formula);
References(p => p.CompanyTopic)
.Fetch.Join();
}
}
Mi manca qualcosa? Qualche idea su come velocizzare gli inserti?
Le query generati saranno stessi sotto:
sì, gli inserimenti sono query separate. –
Per gli inserimenti di massa in cui il tempo conta, vorrei davvero optare per la soluzione 'SQLBulkCopy'. – Rippo