Linq2SQL vs NHibernate性能(我疯了吗?)

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

我编写了以下测试来比较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 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