不知道在他们的论坛上取消这些信息到亚音速工作人员,并说使用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匹配,但是这里的查询语法确实带来了很大的不同,或者是否有一些魔法在我身上不知道?
感谢您的帮助!
答案 0 :(得分:1)
除了您的SubSonic查询似乎没有选择ID字段这一事实之外,这两个SQL语句的所有意图和目的都是相同的。发现两个查询在SQL Management Studio中执行的时间相同,似乎支持这一点。
这似乎表明SubSonic确实需要比EF更长的查询时间。 SubSonic is known to have some issues with performance这肯定可以解释这种差异。
但是,真的,我们需要更详细的确切用法,以便真正确定为什么这个查询对你来说较慢的答案。
此外,如果您正在寻找当前活动并帮助使用SubSonic,您应该尝试their Google Group。
SubSonic的创始人Rob Conery不久前就停止了工作,“SubSonic工作人员”没有发布任何实质性的更新(如果有的话,我认为他们没有,但我是不完全确定)。这是一个项目,你可以考虑“完成”项目的工作已经停止(出于所有实际目的),但在某种程度上,更多的工作并不是真正需要的(它有效)。
顺便说一句,那个说SubSonic论坛的页面已关闭并进入StackOverflow - 好吧,那些页面在一年多的时间里都没有更新,可能是2页。
答案 1 :(得分:1)
Rob Corney因为想要了解为什么SubSonic与EF相比较慢而受到谴责,并告诉我们想要了解为什么SubSonic出现故障是愚蠢的,我们相信我们的团队已经确定了几个地方来解决这些性能问题:
我们的团队计划按以下顺序进行以下修改:
在Extensions / Database.cs中ToEnumerable将属性信息拉一次并将其传递给负载,这被认为会对性能产生最小的影响,但可能会对内存利用率造成影响。
修改ToEnumerable以多线程处理大型数据集的实现。
希望这可以使我们的绩效需求得以实现。
感谢Jeff V,Ken I和QES的帮助。这是可悲的看到亚音速罗布科尼所以防守约亚音速性能的创造者,当它看起来是比较容易解决的。 ~JT
答案 2 :(得分:1)
Subsonic 3非常慢,因为它需要compile again and again and again the same thinks才能进入sql server并询问结果。
这个编译发生在linq部分。
例如,像"Select * FROM Products WHERE ProductID > 100"
这样的简单静态命令,在次声3中输入为Products.Find(x => (x.ProductID > 100)
需要先花费大量时间转换为字符串命令,我的意思是很长时间。
这是亚音速变速如此缓慢的主要原因,这就是为什么亚音速3变得毫无价值。
在linq中,技巧是CompiledQuery.Compile函数,它编译一次并在内存中记住它。对我而言,我的标准也很慢。
现在回到亚音速2,这是一个非常好的主意,但仍然需要在内部进行大量优化。显然他们没有想太多的速度。无论如何,通过一些优化,亚音速2可以超快,靠近简单的ado命令。
我一年前的测试: Benchmark Linq2SQL, Subsonic2, Subsonic3 - Any other ideas to make them faster?
我的想法是回到亚音速2并使其变得更好和更快,并放弃亚音速3.我感谢他们的亚音速2和3,但在版本3他们失败,它确定,我也做了这些年来的许多程序,并非全部使用。没什么大不了的。