저는 Fluent NHibernate를 사용하여 데이터를 SQL Server 데이터베이스로 가져옵니다. 쿼리와 커밋은 세션이 계속되면 더 오래 걸립니다.
나는Fluently.Configure(nhibernateConfig_)
.Mappings(map_ => map_.AutoMappings.Add(AutoMap
.AssemblyOf<EntityMapping>(new AutomapConfiguration())
.UseOverridesFromAssemblyOf<EntityMapping>()
.Conventions.AddFromAssemblyOf<EntityMapping>()));
(완벽하게 일) 내 개체에 자동 매핑을 사용하고 내 입력을 처리로서, 각 쿼리 읽고,
public AttributeTranslation GetOrCreateAttributeTranslation(Attribute attribute_, string language_)
{
AttributeTranslation translation = _session
.QueryOver<AttributeTranslation>()
.And(trans_ => trans_.Attribute == attribute_)
.And(trans_ => trans_.Language == language_)
.SingleOrDefault();
if (translation == null) {
translation = new AttributeTranslation() {
Language = language_,
Attribute = attribute_
};
Save(translation);
}
return translation;
}
불행하게도 데이터베이스에서 데이터를 얻을 수 QueryOver를 사용 커밋 된 각 트랜잭션은 세션이 진행됨에 따라 더 오래 걸립니다.
// Surrounded in several for loops that process the input
using (ITransaction transaction = _repo.BeginTransaction()) {
Stopwatch transGetWatch = Stopwatch.StartNew();
AttributeTranslation translation = _repo.GetOrCreateAttributeTranslation(attribute, lang.Key);
transGetWatch.Stop();
translation.DisplayName = value;
_repo.Save(translation);
Stopwatch commitWatch = Stopwatch.StartNew();
transaction.Commit();
commitWatch.Stop();
Console.Write("\rGetTrans[{0}] Commit[{1}] ",
transGetWatch.ElapsedMilliseconds,
commitWatch.ElapsedMilliseconds);
}
ID 생성을 위해 HiLo로 전환하려고했지만 아무 소용이 없었습니다.
public class AttributeTranslationMapOverride : IAutoMappingOverride<AttributeTranslation>
{
public void Override(AutoMapping<AttributeTranslation> map_)
{
map_.Id(attr_ => attr_.Id).GeneratedBy.HiLo("attributeTranslationMaxLo");
}
}
쿼리 및 커밋은 호출 당 약 3-4 밀리 초에서 시작하여 끝에 약 80-100의 어딘가에서 끝납니다.
필자는 전반적인 성능을 반드시 낮추지 않아도되며, 호출 당 처음 3-4ms에서 안정화되기를 바랍니다.
여기에 무슨 일이 일어날 수 있습니까?
'의심의 색인'이 높음은 세션의 1 차 수준 캐시가 커질 것이며 아마도 영향을 미칠 것입니다. 진단 목적으로 안전한 간격으로 세션을 정리하고 효과를 측정하려 했습니까? –
@DavidOsborne 안전 간격으로 생각하는 것이 무엇입니까?또는 세션을 치료하는 것이 안전 할 때를 어떻게 결정할 수 있습니까? 행마다 Excel 파일에서 데이터를 가져오고 있습니다. 각 행이 나올 때마다 각 행이 자체 업데이트 프로세스가 될 수 있습니다. –
거의 [this] (/ q/2151198/1178314)의 거의 dup입니다. –