我一直在寻找比较L2S和EF的最新性能基准,并且找不到任何使用发布的EF版本调用存储过程的测试。所以,我跑了一些我自己的测试,发现了一些有趣的结果。Linq To Sql vs实体框架性能
这些结果看起来不错吗?我应该以不同的方式测试它吗?
的情况下,存储过程的一个调用的一个实例: (死链接)上下文
一个实例,相同存储过程的多个呼叫: (死链接)的
多个实例上下文,同一个sproc的多个调用: (死链接)
我一直在寻找比较L2S和EF的最新性能基准,并且找不到任何使用发布的EF版本调用存储过程的测试。所以,我跑了一些我自己的测试,发现了一些有趣的结果。Linq To Sql vs实体框架性能
这些结果看起来不错吗?我应该以不同的方式测试它吗?
的情况下,存储过程的一个调用的一个实例: (死链接)上下文
一个实例,相同存储过程的多个呼叫: (死链接)的
多个实例上下文,同一个sproc的多个调用: (死链接)
我认为你应该用一种稍微不同的方式测试它,以便区分startup costs vs. execution costs。实体框架,特别是,有大量的startup costs resulting from the need to compile database views(虽然你可以提前做到这一点)。同样,LINQ有一个compiled query的概念,如果多次执行查询,这将是适当的。
对于许多应用程序来说,查询执行成本将比启动成本更重要。对于某些人来说,情况正好相反。由于它们的性能特征不同,我认为区分它们很重要。特别是,将启动成本平均分配到重复执行的查询的平均成本中会产生误导。
我做了几个测试asp.net页面试图看看哪个更好。我的测试是:
删除10000条记录 插入10000条记录 编辑10000条记录 数据绑定的10000条记录到页
我期待LinqToSQL要快于GridView和显示器,但做上述LinqToSQL约需2分钟LinqToEntities不到20秒。
至少在这个测试中,LinqToEntities似乎更快。我的结果似乎也与你的匹配。
我没有尝试插入/编辑/删除/显示超过1个表连接在一起虽然。
我很想了解更多......或者如果我的测试不是有效的测试类型,我会对看到一些真正的测试感兴趣。
这看起来是LINQ to SQL和Entity Framework之间性能的一个很好的度量。
http://toomanylayers.blogspot.com/2009/01/entity-framework-and-linq-to-sql.html
将上下文创建行放在using()块中时会发生什么?那些持续时间较长的呼叫可能是由于系统在池中没有连接...? – 2008-11-02 16:39:18
您可能还希望对更新,删除和插入性能进行基准测试。 – DamienG 2008-11-02 22:42:34
你的数据代码通常是这样吗?不知何故,它看起来不像真正的数据访问代码......测试循环与真实数据访问模式的外观没有什么共同之处。 – 2008-12-04 04:26:25