关于LINQ,SqlDataReader, DataSet 以及LINQ Compiled Queries的性能对比

       开发web程序,性能为王,web应用就是要使用最简单的方法,最廉价的应用实现密集的计算,最近在用asp.net mvc写一个帖吧程序,喜欢mvc的不是为了别的,URL比较好看,终于可以像struts一样实现: http://doamin/board-11-page-1-0 这样比较漂亮的URL了。

       遇到Linq,一直都对这样东西不以为然,当年就及其唾弃hibernate这样的架构,可能开发一般的企业应用可能比较适合,但是肯定不适合web,还不如用JDBC+类似JCS的key value缓存,主要是为了满足部分知识面窄的程序员搭车的需要。不过遇到了Linq不得不研究一下,因为不调查就没有发言权,试着做了几个demo,发现比asp.net MVC还是好很多的,写model比较顺手,Controller的编写也比较符合个人喜好。Html.Action和Struts里很像,很神奇的是URL的匹配模式可以自动转换,让匹配不到RouteMap规则的时候会自动变成?board=11&page=1,这个喜欢。

      使用.net的原应就是.net的运行效率高java太多,一台windows的承受负荷比linux+jsp要高很多,在上一篇文章《.net的运行效率问题》讨论过。当然开发团队的素质还是决定性的,再好的架构都可能被写成焦油坑式的程序。看到一篇文章,对linq等几种数据访问的性能进行了对比:

Performance benchmarks for LINQ vs. SqlDataReader, DataSet - LINQ Compiled Queries: Part 2

我们这里只看数据,争论没用,用benchmark说话:

******************************
Run : 1
SQL Data Reader: 1,582 ms
LINQ to SQL: 6,045 ms
Strongly Typed DataSet: 2,785 ms
LINQ to SQL Compiled: 2,472 ms
 
******************************
Run : 2

SQL Data Reader: 1,556 ms
LINQ to SQL: 5,855 ms
Strongly Typed DataSet: 2,696 ms
LINQ to SQL Compiled: 2,432 ms
 
******************************
Run : 3

SQL Data Reader: 1,553 ms
LINQ to SQL: 5,859 ms
Strongly Typed DataSet: 2,730 ms
LINQ to SQL Compiled: 2,418 ms
 
-------------------------------------------------------------------
Data Access Type    Run 1    Run 2    Run 3    Average

SQL Data Reader        1,582    1,556    1,553    1,563
LINQ to SQL        6,045    5,855    5,859    5,919
Strongly Typed DataSet    2,785    2,696    2,730    2,737
LINQ to SQL Compiled    2,472    2,432    2,418    2,440
 
-------------------------------------------------------------------
SQL Data Reader Breakdown

378.69% faster than LINQ to SQL
175.11% faster than Strongly Typed DataSet
156.11% faster than LINQ to SQL Compiled
 
-------------------------------------------------------------------
LINQ to SQL Breakdown
378.69% slower than SQL Data Reader
216.26% slower than Strongly Typed DataSet
242.58% slower than LINQ to SQL Compiled
 
-------------------------------------------------------------------
Strongly Typed DataSet Breakdown
175.11% slower than SQL Data Reader
216.26% faster than LINQ to SQL
112.17% slower than LINQ to SQL Compiled
 
-------------------------------------------------------------------
LINQ to SQL Compiled Breakdown
156.11% slower than SQL Data Reader
242.58% faster than LINQ to SQL
112.17% faster than Strongly Typed DataSet

比较起来,Data Reader还是最高效的,DataSet次之, LINQ to SQL Compiled还行,LINQ就不要用了。

再次证明了程序越干净越好。

原创作品,转载请注明出处
Tags:   

发表评论
姓  名: 与日志主题不符的评论将不予回复,请到留言本.
Email地址: 游客发言不需要密码.
个人主页:
内 容:
验证码:

键入您在以上图片中看到的字符。

选 项: (你可以使用 HTML 标签设置风格)
如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。.