Вот уже несколько дней я работаю над улучшением производительности NHibernate Insert.
Я читал во многих постах (например, этот), что stateless session может вставлять около 1000~2000 записей в секунду..... Однако лучшее время, за которое он может вставить 1243 записи, составляет более 9 секунд для меня :
var sessionFactory = new NHibernateConfiguration().CreateSessionFactory();
using (IStatelessSession statelessSession = sessionFactory.OpenStatelessSession())
{
statelessSession.SetBatchSize(adjustmentValues.Count);
foreach (var adj in adjustmentValues)
statelessSession.Insert(adj);
}
Класс :
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; }
}
Карта класса :
public class AdjustmentValueMap : ClassMap
{
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();
}
}
Я что-то упускаю? Есть идеи, как ускорить вставку?
Сгенерированные запросы будут такими же, как ниже :