To były kilka dni, nad którymi pracuję nad poprawą wydajności NHibernate Insert.Wstawki bezstanowej sesji NHibernate są powolne
czytałem w wielu stanowisk (takich jak this one), które bezpaństwowcem sesja można wstawić jak 1000 ~ 2000 rekordów na sekundę .... jednak najlepszy czas, że może wstawić 1243 rekordów jest więcej niż 9 sekund do mi:
var sessionFactory = new NHibernateConfiguration().CreateSessionFactory();
using (IStatelessSession statelessSession = sessionFactory.OpenStatelessSession())
{
statelessSession.SetBatchSize(adjustmentValues.Count);
foreach (var adj in adjustmentValues)
statelessSession.Insert(adj);
}
Klasa:
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 Klasa:
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();
}
}
Czy czegoś brakuje? Każdy pomysł, jak przyspieszyć wstawki?
Generowane zapytań będą takie same, jak poniżej:
tak, inserty są osobnymi zapytaniami. –
W przypadku insertów zbiorczych tam, gdzie liczy się czas, wybrałbym rozwiązanie "SQLBulkCopy". – Rippo