Han pasado un par de días trabajando para mejorar el rendimiento de la inserción de NHibernate.Las inserciones de la sesión sin estado de NHibernate son lentas
que había leído en muchos mensajes (tales como this one) que sesión sin puede insertar como 1000 ~ 2000 registros por segundo .... Sin embargo, el mejor momento que podría insertar los registros de 1243 es de más de 9 segundos para me:
var sessionFactory = new NHibernateConfiguration().CreateSessionFactory();
using (IStatelessSession statelessSession = sessionFactory.OpenStatelessSession())
{
statelessSession.SetBatchSize(adjustmentValues.Count);
foreach (var adj in adjustmentValues)
statelessSession.Insert(adj);
}
la clase:
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; }
}
Mapa de la clase:
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();
}
}
¿Me está faltando algo? ¿Alguna idea de cómo acelerar los insertos?
Las consultas generadas serán iguales que abajo:
sí, las inserciones son consultas separadas. –
Para inserciones masivas donde el tiempo importa, realmente iría por la solución 'SQLBulkCopy'. – Rippo