NOCOUNT如何影响ADO.NET(SET NOCOUNT ON的性能问题)
How NOCOUNT affects ADO.NET一文中提到:
Previously, in Classic ASP and ADO, NOCOUNT was most commonly a factor if you were checking RecordsAffected on Command.Execute(). SqlDataReader does have a RecordsAffected property, but it's rarely used since it's not populated until the datareader has iterated all the rows and the datareader is closed. There are some possible implications if you're using DataAdapters to submit changes to the database, since it uses the rows affected result to determine if the update succeeded. Probably the easiest way to check for that case is to search the codebase for SqlDataAdapter and see if the Update() method is being called.
还有:
Tech notes if you're interested in tracing how RecordsAffected is set and used by pointing Reflector at System.Data:
System.Data.SqlClient.TdsParser.ProcessDone() sets RecordsAffected.
System.Data.Common.DbDataAdapter.UpdateRow() uses reader.RecordsAffected in determining whether to call AcceptChanges and ApplyToDataRow.
保险一点来说,通过作者所说的调用Update()来做判断似乎并不可靠,中间有很多步骤都有可能出问题从而影响最终的结果。同时,debug起来的也有麻烦了,嵌入sql debug后对于调试程序很有用,而如果按作者所说这个debug的功能都被削减了。又把database和application给分开调了。
评论中有人写了一个简单的测试程序,并给出了他的测试结果,他认为还是SET NOCOUNT ON快。
DECLARE @Start DATETIME, @End DATETIME, @Counter INT, @NoCountOff INT, @NoCountOn INT
CREATE TABLE #MyTable (
Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY
, FirstName VARCHAR(128) NOT NULL
, LastName VARCHAR(128) NOT NULL
)
SET NOCOUNT OFF
SET @Counter = 1
SET @Start = GETDATE()
WHILE @Counter <= 150000
BEGIN
INSERT #MyTable (FirstName, LastName) VALUES ('Scott', 'Whigham')
SET @Counter = @Counter + 1
END
SET @End = GETDATE()
SELECT @NoCountOff = DATEDIFF(ms, @Start, @End)
SET NOCOUNT ON
SET @Counter = 1
SET @Start = GETDATE()
WHILE @Counter <= 150000
BEGIN
INSERT #MyTable (FirstName, LastName) VALUES ('Scott', 'Whigham')
SET @Counter = @Counter + 1
END
SET @End = GETDATE()
SELECT @NoCountOn = DATEDIFF(ms, @Start, @End)
SELECT @NoCountOff AS 'NoCountOff', @NoCountOn AS 'NoCountOn', COUNT(*) AS NumberOfRows FROM #MyTable
DROP TABLE #MyTable
我与他测试的环境不同,在xp + SQL 2005 Ent with SP1上测试的,结果结论相反,把结果数据也share给大家:
NoCountOff | NoCountOn | xRate
7106 5893 20.58%
6156 6890 -10.61%
7093 7343 -3.41%
5780 6406 -9.77%
5563 6860 -18.91%
5610 7390 -24.09%
5810 6923 -21.38%
6296 7436 -15.33%
-- insert 1
46 0
16 0
0 0
0 0
16 0
-- insert 1000
420 393 6.88%
423 390 8.47%
966 423 128.37%
-- insert 100,000
43250 42860 0.91%
-- delete all then insert 100,000
42076 39826 5.65%
如果您也亲自测试一下可以很明显的发现:结果对于证明起到的作用很小。
NOCOUNT如何影响ADO.NET(SET NOCOUNT ON的性能问题)相关推荐
- mysql odbc ado性能差异_ODBC、OLEDB和ADO之间的关系 ,以及性能比较
学习了.net视频之后,对里面涉及到的数据库连接部分中的一些概念表示很无语.网上很多相关资料,但除了网站不一样外,基本上内容都神一样的一致. 现在,我就通过结合看到的一些资料再加上自己的理解试图去解释 ...
- 跑深度模型的显卡_不止显卡!这些硬件因素也影响着你的深度学习模型性能
加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...
- 计算机硬盘对计算机速度的影响,实测加密软件BitLocker对硬盘性能有何影响
虽然说BitLocker的加密和解密过程用户无需干预,但是毕竟还是需要耗费一定的资源的,那么开启BitLocker加密后的磁盘分区,性能会损失多少呢?接下来我们来个小测试.测试工具为ATTO Disk ...
- java 线程多影响内存吗_Java多线程引发的性能问题,怎么解决?
主要的影响如下: 消耗时间:线程的创建和销毁都需要时间,当有大量的线程创建和销毁时,那么这些时间的消耗则比较明显,将导致性能上的缺失 非常耗CPU和内存:大量的线程创建.执行和销毁是非常耗cpu和内存 ...
- SET NOCOUNT ON 作用
每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这是些什么信息?在我们调用的时候这些信息有用吗?是否可以关闭呢? 答案是这些信息在我们的客户端的应用 ...
- sql server中的 SET NOCOUNT ON 的含义
每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这是些什么信息?在我们调用的时候这些信息有用吗?是否可以关闭呢? 答案是这些信息在我们的客户端的应用 ...
- nocount on_在SQL Server中设置NOCOUNT ON语句的用法和性能优势
nocount on Have you ever noticed SET NOCOUNT ON statement in T-SQL statements or stored procedures i ...
- SQL Server中Rowcount与@@Rowcount的用法 和set nocount on 也会更新@@Rowcount
rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, set rowcount 10 select * from 表A 这样的查询只 ...
- SQL Prompt教程:使用SQL Prompt查找SET NOCOUNT代码问题
SQL Prompt是一款实用的SQL语法提示工具.SQL Prompt根据数据库的对象名称.语法和代码片段自动进行检索,为用户提供合适的代码选择.自动脚本设置使代码简单易读–当开发者不大熟悉脚本时尤 ...
最新文章
- Linux系统配置VI或VIM的技巧
- 《NoSQL For Mere Mortals》书评与作者问答录
- .NET : VS 2008中的一个转换器
- ListView 常用属性
- iframe引用页面中的js操作父窗口标签
- 超凡先锋怎么进入维护服务器,超凡先锋新手教程怎么过 新手教程攻略_超凡先锋...
- c++批量重命名_手把手教你用Python批量给图片添加水印 | 知了干货分享
- 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
- RocketMQ 部署不当导致磁盘空间不释放
- Docker 视频教程 ( 猿课 )
- (转)左耳朵耗子:技术人如何更好地把控发展趋势?
- List of Algorithms
- dell灵越笔记本后盖怎么拆_如何拆卸Dell Inspiron 15 5570笔记本电脑并安装M.2 SSD
- 一个简单炫酷的前端小项目(html+css+js)----3D图片演示
- lol-----寒冰射手-----艾希
- 几款好用播放器ijkplayer、vlc、SmartPlayer、ExoPlayer
- oracle em 监听,监听程序ORACLE_HOME是啥??我EM重置,这个不知道要填什么
- matlab实现密堆立方体,LAMMPS如何定义六角密堆结构HCP
- hiredis的代码示例
- 采用scp命令进行FTP数据迁移