我正在与Subsonic 2合作超过3年......
在Linq出现,然后是Subsonic 3之后,我开始考虑转移到连接到sql的新Linq期货.
我必须说我开始移动并用SubSonic 3移植我的亚音速2,很快我就发现速度太慢而我不相信 - 并开始所有的测试.
然后我测试Linq2Sql并看到延迟 - 将它与Subsonic 2进行比较.
我的问题是,特别是linq2sql和即将推出的dotnet版本4,我还能做些什么来加快速度呢?linq2sql设置或类上还有什么,而不是我用于我的烦恼的代码
我在这里放置了我进行测试的项目,以及结果的屏幕截图.
我只使用我的问题谷歌chrome,因为我很难在这里展示我用更复杂的程序做的很多其他措施.这是最简单的一个,我只测量数据读取.我怎么能证明这一点.我做了一个简单的Thread.Sleep(10秒),看看我是否在Google Chrome Measure上看到了10秒,是的,我看到了.
http://www.planethost.gr/GoogleChromeFastSpeedMesure.gif
这里有更多的测试,这个Sleep thead看看Chrome实际上是什么.
只有一个小的15毫秒可以搞定,它是如此之小,与我不关心的其他测试相比.
我只测量通过每种方法读取的数据 - 没有计算数据或数据库延迟,或任何磁盘读取或类似的东西.稍后在带有结果的图像上,我显示测量中没有磁盘活动.
请参阅此图像以查看我真正测量的内容以及这是否正确
它很简单,它是真实的,而且接近我真正的问题,我发现实际程序中亚音速3的延迟与实际数据有关.
首先看这个图像 我对每个方法都有4-5个调用,一个接一个.
结果是.对于100次循环,请求5行,一行不存在,近似...
简单的adonet:81ms
SubSonic 2:210ms
linq2sql:1.70sec
linq2sql使用CompiledQuery.Compile:239ms
亚音速3:15.00sec(哇 - 极慢)
该项目 http://www.planethost.gr/DalSpeedTests.rar
任何人都可以确认这个基准,或进行任何优化来帮助我吗?
有人在这里发布这个链接http://ormbattle.net/(然后删除它 - 不知道为什么)在这个页面你可以找到一个非常有用的高级测试,除了我在这里的亚音速2和亚音速3!
我在这里真正要问的是,如果有人能够如何优化DAL,不是通过更改测试代码,而是通过更改每个dal上的代码和设置.例如...
我开始搜索如何优化Linq2sql并找到 这篇文章,也许更多的存在.
最后,我从该页面开始运行,并使用它们优化代码.速度从1.70开始接近1.50秒....大幅改善,但仍然缓慢.
然后我发现了一种不同的方式 - 同样的想法文章,哇!速度很快. 使用CompiledQuery.Compile的这个技巧,1.5秒的时间现在是239ms. 这是预编译的代码......
Func<DataClassesDataContext, int, IQueryable<Product>> compiledQuery …Run Code Online (Sandbox Code Playgroud)