【发布时间】:2011-05-07 01:52:30
【问题描述】:
在亚音速工作人员关闭论坛并说使用 stackoverflow 时,不确定从哪里获得这些信息,所以我们开始吧。
我一直在努力使用 ORM 实现最佳性能。我喜欢亚音速,它的批量插入、更新、删除在这种情况下消除了实体框架,但是对于直接简单的读取,EF 以 5 倍的速度将亚音速吹出水面。
我已经剥离了两者,删除了更改跟踪、外部属性、导航属性,一切都归结为 poco。
EF 在大约 4.8 中执行 1M 行的简单选择,SubSonic Linq 是 5 倍...
查看 SQL 探查器,调用略有不同:
实体框架:SELECT TOP (1000000)
[c].[Id] AS [Id],
[c].[ProjectIDL] AS [ProjectIDL],
[c].[DescriptorIDL] AS [DescriptorIDL],
[c].[FieldIDL] AS [FieldIDL],
[c].[Data] AS [Data],
[c].[OptionId] AS [OptionId]
FROM [dbo].[DescriptorFieldValues] AS [c]
亚音速:SELECT TOP (1000000) [t0].[Data], [t0].[DescriptorIDL], [t0].[FieldIDL], [t0].[Id], [t0].[OptionId], [t0].[ProjectIDL]
FROM [dbo].[DescriptorFieldValues] AS t0
SQL 分析器正在运行跟踪并在此处显示巨大的持续时间差异。
我在两个查询之前检查了审计登录,它们是相同的......
如果我在 sql management studio 中运行相同的查询,这两个查询都需要 11 秒
查看亚音速 3.04 源代码,我无法弄清楚我会在哪里进行调整以使其与 EF 匹配,但这里的查询语法真的有那么大的不同吗,或者我正在发生一些魔法不知道?
感谢您的帮助!
【问题讨论】:
-
“EF 在大约 4.8 中执行 1M 行的简单选择,SubSonic Linq 是 5 倍……” 至少,我们应该看到这个断言来自的代码,以及它是在什么条件下观察到的。我记得读过(但找不到源代码)SubSonic 使用了一些动态代码生成,因此最初编译的时间成本可能很高。另外,问题是,如果在管理工作室中运行需要 11 秒,您认为 EF 如何在“4.8”(4.8 什么,顺便说一句?)中返回查询?
-
我指的是来自 SQL 监视器的时间 - 查看从 SQL Server 接收并处理它到返回结果的时间,至少我认为是这样的......跨度>
-
你还没有建立任何真正的比较基础,我仍然对你从哪里得到数字感到很困惑。您是说 4.8 和“5x that”来自 SQL Monitor 报告的内容吗?如果您要询问性能,那么非常明确和详细会有所帮助。如果没有更多详细信息,我将无法再提供帮助。
-
顺便说一句 - 我们构建了一些自定义模板并稍微编辑了 SubSonic,并且能够从中获得出色的性能。如果您需要帮助,请随时与我联系。