Linq2SQL vs NHibernate性能(我疯了吗?)
我编写了以下测试来比较Linq2SQL和NHibernate的性能,结果有些奇怪。映射是直截了当的,两者都是相同的。两者都在运行一个实时数据库。虽然我不会在Linq的情况下删除活动,但这对性能的影响不会超过10毫秒 林克: 结果:Linq2SQL vs NHibernate性能(我疯了吗?),nhibernate,linq-to-sql,Nhibernate,Linq To Sql,我编写了以下测试来比较Linq2SQL和NHibernate的性能,结果有些奇怪。映射是直截了当的,两者都是相同的。两者都在运行一个实时数据库。虽然我不会在Linq的情况下删除活动,但这对性能的影响不会超过10毫秒 林克: 结果: NHibernate: Total Time: 9469 ms Average time to execute 13 queries: 9 ms Linq: Total Time: 127200 ms Average time to execute 13 queri
NHibernate:
Total Time: 9469 ms
Average time to execute 13 queries: 9 ms
Linq:
Total Time: 127200 ms
Average time to execute 13 queries: 127 ms
林克输了13.5次!带有预编译查询的事件(两个读取查询都是预编译的)
这不可能是正确的,尽管我期望NHibernate更快,但考虑到映射是相同的,而且NHibernate实际上对数据库执行更多查询,这差别实在太大了
更新。我重构了一个项目,使用NHibernate而不是Linq2Sql,与使用相同映射的测试相比,性能提升似乎要少得多(大约20-30%)。有人有自己的真实示例吗?在.NET代码和SQL Server数据库上运行探查器。另外,确定在这两种情况下运行的SQL语句。LinqToSql浪费的时间在哪里?如果底层SQL语句不同,为什么?很有可能您可以调整这两个orm以加快速度。对于简单的测试,它们的性能应该大致相同。这感觉像是一个配置问题。首先,您不能在linq中预编译插入、更新和删除查询,而在NH中,它们在映射过程中只生成一次。我不确定实际的SQL是什么,这不重要,因为DB是空的,但是Linq在QueryBuilder中损失了大部分时间。你为什么感到惊讶?了解ORM(或自己编写ORM)的人通常认为LING(和EF)目前并不完全是“顶级”产品;)三年级的尝试。也许;)
private void ReadWriteAndDeleteAgentState()
{
var id = WriteAgentState().Id;
StartNewTransaction();
var dbAgentState = agentStateRepository.Get(id);
Assert.IsNotNull(dbAgentState);
Assert.AreEqual(dbAgentState.CallState, 3);
Assert.AreEqual(dbAgentState.Campaigns[0].Dispositions[0].Description, "abc");
var campaignId = dbAgentState.Campaigns[0].Id;
agentStateRepository.Delete(dbAgentState);
NHibernateSession.Current.Transaction.Commit();
Cleanup(campaignId);
NHibernateSession.Current.BeginTransaction();
}
NHibernate:
Total Time: 9469 ms
Average time to execute 13 queries: 9 ms
Linq:
Total Time: 127200 ms
Average time to execute 13 queries: 127 ms