关于LINQ和SQL操作数据库的性能测试_第1页
关于LINQ和SQL操作数据库的性能测试_第2页
关于LINQ和SQL操作数据库的性能测试_第3页
关于LINQ和SQL操作数据库的性能测试_第4页
关于LINQ和SQL操作数据库的性能测试_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于LINQ和SQL操作数据库的性能测试微软linq技术已经出现很久,很多公司已经开始商业使用,作为我们暂时没有用到的人来说,也应该适当的了解下相关知识,但是直到目前网络上对他的看法仍然是褒贬不一,当然任何事情都不可能完美的,下面就针对大多数人比较关注的效率问题做一次试验,来实实在在的用事实说次话,(由于过年在家无事突发奇想做的试验也没用到专业测试工具,但就大体而言,能说明问题就够了)声明:本测试全部原创,属于个人爱好测试,如转载,希望保留作者,另外,如不认同或专业使用可另行测试测试目的:主要是测试两者的时间区别测试者:石曼迪()出 处:测试环境:CPU:奔腾双核T3400(2.16G)内存:

2、2G 667硬盘:160G操作系统:XP SP3编译工具:vs 2008+mssql 2005测试依据(非专业精密工具):Stopwatch 类提供一组方法和属性,可用于准确地测量运行时间。Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性检查运行时间。Stopwatch 实例或者在运行,或者已停止;使用 IsRunning 可以确定 Stopwatch 的当前状态。使用 Start 可以开始测量运行时间;使用 Stop 可以停止测量

3、运行时间。通过属性 Elapsed、ElapsedMilliseconds 或 ElapsedTicks 查询运行时间值。当实例正在运行或已停止时,可以查询运行时间属性。运行时间属性在 Stopwatch 运行期间稳固递增;在该实例停止时保持不变。默认情况下,Stopwatch 实例的运行时间值相当于所有测量的时间间隔的总和。每次调用 Start 时开始累计运行时间计数;每次调用 Stop 时结束当前时间间隔测量,并冻结累计运行时间值。使用 Reset 方法可以清除现有 Stopwatch 实例中的累计运行时间。Stopwatch 在基础计时器机制中对计时器的刻度进行计数,从而测量运行时间。如

4、果安装的硬件和操作系统支持高分辨率性能的计数器,则 Stopwatch 类将使用该计数器来测量运行时间;否则,Stopwatch 类将使用系统计数器来测量运行时间。使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。Stopwatch 类为托管代码内与计时有关的性能计数器的操作提供帮助。具体说来,Frequency 字段和 GetTimestamp 方法可以用于替换非托管 Win32 API QueryPerformanceFrequency 和 QueryPerformanceCounter。注意:在多处理器计算机上,线程

5、在哪个处理器上运行无关紧要。但是,由于 BIOS 或硬件抽象层 (HAL) 中的 bug,在不同的处理器上可能会得出不同的计时结果。若要为线程指定处理器关联,请使用 ProcessThread.:.ProcessorAffinity 方法。测试前准备:新建一个数据库:SpeedTest,插入500万条记录用时38分57秒,最终数据库大小:213M见表语句如:CREATE TABLE Tab(Id int IDENTITY(1,1) NOT NULL,Context nvarchar(50) NOT NULL,DoTime datetime NOT NULL)测试代码见附件插入语句如:decla

6、re i int,start datetime,end datetimeset i=0set start=getdate()while(i<5000000)begin insert into tab(context,dotime)values('值:'+convert(varchar(20),rand()*10*rand(),getdate() set i=i+1endset end=getdate()print '插入500万条数据用时:'+convert(varchar(20),datediff(ms,start,end)第一轮测试查询查询第10000

7、0到120000条数据中的长度为8的数据查询用SQL语句如:-查询第到条数据中的长度为的数据declare start datetime,end datetimeset start=getdate()select * from (select top 20000 * from tab where id not in(select top 100000 id from tab) as t where len(t.Context)=8set end=getdate()print '插入万条数据用时:'+convert(varchar(20),datediff(ms,start,en

8、d)测试结果如:单位:秒第一次第二次第三次第四次第五次第六次第七次第八次第九次第十次Linq0.67880.6810.67040.68040.6860.65550.67530.6770.67170.6744SQL0.56530.54980.56990.56730.56990.57950.57560.58690.57490.5735MSSQL0.1560.1100.1430.1700.1260.1560.1260.1430.1400.126第二轮测试修改查询用SQL语句(把能被5整除的数据修改为“测”,应该影响1000000行):update tab set Context=Context wh

9、ere id%5=0测试结果如下:本来想批量修改数据的,更新100万行使用SQL语句用时基本在5.45.8秒之间,但是使用LINQ基本就挂了,5分钟都出不了结果,看来如果是批量修改,特别是大批量修改,还是尽量避免使用LINQ现在就改变下测试思路,修改其中一条数据。update tab set DoTime=dateadd(ms,1,DoTime) where id=2500000测试结果如下:单位:秒第一次第二次第三次第四次第五次第六次第七次第八次第九次第十次Linq0.20680.20220.20290.20640.20550.20250.20670.20120.20580.2031Sql0

10、.14660.14250.13860.14190.14570.13880.1420.13840.13880.1426第三轮测试插入批量插入1万条数据测试结果如下:单位:秒第一次第二次第三次第四次第五次第六次第七次第八次第九次第十次Linq9.42439.57579.26379.59139.52649.5739.56069.54489.42619.7743Sql8.76818.42397.92367.83327.82648.06147.9977.9797.8888.2885综上所述,LINQ这个新技术,在代码上和思想上的确很有优势,但是归根结底还是使用的是.net 2.0 的框架,只是抽象了一个接口而已,生成SQL语句的过程被LINQ完成,所以说LINQ即使到了极限也不能超越传统的SQL,另外据查资料,LINQ另一个瓶颈

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论