новичок здесь, извините, если это очевидный вопрос.
Кажется, сохранение разных типов объектов в одной и той же сессии прерывает пакет, вызывает значительное снижение производительности.
Генератор идентификаторов установлен наПриращение (как советовал Диего Миджелсон, я пробовал hilo («100»), но, к сожалению, та же проблема, Test1 () все еще примерно в 5 раз медленнее, чем Test2 ()):
public class CustomIdConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
instance.GeneratedBy.Increment();
}
}
AdoNetBatchSize установлен в 1000:
MsSqlConfiguration.MsSql2008
.ConnectionString(connectionString)
.AdoNetBatchSize(1000)
.Cache(x => x
.UseQueryCache()
.ProviderClass<HashtableCacheProvider>())
.ShowSql();
Это модели:
public class TestClass1
{
public virtual int Id { get; private set; }
}
public class TestClass2
{
public virtual int Id { get; private set; }
}
Это методы испытаний. Test1 () занимает 62 секунды, Test2 () занимает всего 11 секунд. (как советовал Фил, я пробовал сеансы без сохранения состояния, но, к сожалению, та же проблема):
[TestMethod]
public void Test1()
{
int count = 50 * 1000;
using (var session = SessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
for (int i = 0; i < count; i++)
{
var x = new TestClass1();
var y = new TestClass2();
session.Save(x);
session.Save(y);
}
transaction.Commit();
}
}
}
[TestMethod]
public void Test2()
{
int count = 50 * 1000;
using (var session = SessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
for (int i = 0; i < count; i++)
{
var x = new TestClass1();
session.Save(x);
}
transaction.Commit();
}
}
using (var session = SessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
for (int i = 0; i < count; i++)
{
var y = new TestClass2();
session.Save(y);
}
transaction.Commit();
}
}
}
Есть идеи?
Спасибо!
Обновление:
Тестовый проект можно загрузить с здесь .Вам нужно изменить connectionString в методе Main.Я изменил все сеансы на сеансы без сохранения состояния.
Мои рестулы: Test1 = 59,11, Test2 = 7,60, Test3 = 7,72.Тест1 в 7,7 раза медленнее, чем Тест2 и Тест3!