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的性能问题)相关推荐

  1. mysql odbc ado性能差异_ODBC、OLEDB和ADO之间的关系 ,以及性能比较

    学习了.net视频之后,对里面涉及到的数据库连接部分中的一些概念表示很无语.网上很多相关资料,但除了网站不一样外,基本上内容都神一样的一致. 现在,我就通过结合看到的一些资料再加上自己的理解试图去解释 ...

  2. 跑深度模型的显卡_不止显卡!这些硬件因素也影响着你的深度学习模型性能

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  3. 计算机硬盘对计算机速度的影响,实测加密软件BitLocker对硬盘性能有何影响

    虽然说BitLocker的加密和解密过程用户无需干预,但是毕竟还是需要耗费一定的资源的,那么开启BitLocker加密后的磁盘分区,性能会损失多少呢?接下来我们来个小测试.测试工具为ATTO Disk ...

  4. java 线程多影响内存吗_Java多线程引发的性能问题,怎么解决?

    主要的影响如下: 消耗时间:线程的创建和销毁都需要时间,当有大量的线程创建和销毁时,那么这些时间的消耗则比较明显,将导致性能上的缺失 非常耗CPU和内存:大量的线程创建.执行和销毁是非常耗cpu和内存 ...

  5. SET NOCOUNT ON 作用

    每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这是些什么信息?在我们调用的时候这些信息有用吗?是否可以关闭呢? 答案是这些信息在我们的客户端的应用 ...

  6. sql server中的 SET NOCOUNT ON 的含义

    每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这是些什么信息?在我们调用的时候这些信息有用吗?是否可以关闭呢? 答案是这些信息在我们的客户端的应用 ...

  7. nocount on_在SQL Server中设置NOCOUNT ON语句的用法和性能优势

    nocount on Have you ever noticed SET NOCOUNT ON statement in T-SQL statements or stored procedures i ...

  8. SQL Server中Rowcount与@@Rowcount的用法 和set nocount on 也会更新@@Rowcount

    rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, set rowcount 10 select * from 表A 这样的查询只 ...

  9. SQL Prompt教程:使用SQL Prompt查找SET NOCOUNT代码问题

    SQL Prompt是一款实用的SQL语法提示工具.SQL Prompt根据数据库的对象名称.语法和代码片段自动进行检索,为用户提供合适的代码选择.自动脚本设置使代码简单易读–当开发者不大熟悉脚本时尤 ...

最新文章

  1. Linux系统配置VI或VIM的技巧
  2. 《NoSQL For Mere Mortals》书评与作者问答录
  3. .NET : VS 2008中的一个转换器
  4. ListView 常用属性
  5. iframe引用页面中的js操作父窗口标签
  6. 超凡先锋怎么进入维护服务器,超凡先锋新手教程怎么过 新手教程攻略_超凡先锋...
  7. c++批量重命名_手把手教你用Python批量给图片添加水印 | 知了干货分享
  8. 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
  9. RocketMQ 部署不当导致磁盘空间不释放
  10. Docker 视频教程 ( 猿课 )
  11. (转)左耳朵耗子:技术人如何更好地把控发展趋势?
  12. List of Algorithms
  13. dell灵越笔记本后盖怎么拆_如何拆卸Dell Inspiron 15 5570笔记本电脑并安装M.2 SSD
  14. 一个简单炫酷的前端小项目(html+css+js)----3D图片演示
  15. lol-----寒冰射手-----艾希
  16. 几款好用播放器ijkplayer、vlc、SmartPlayer、ExoPlayer
  17. oracle em 监听,监听程序ORACLE_HOME是啥??我EM重置,这个不知道要填什么
  18. matlab实现密堆立方体,LAMMPS如何定义六角密堆结构HCP
  19. hiredis的代码示例
  20. 采用scp命令进行FTP数据迁移

热门文章

  1. 【存储知识学习】第四章-七种RAID-《大话存储》阅读笔记
  2. 【企业管理】人力资源是CEO的第一工程
  3. 2021年下信息系统项目管理师真题各章节占分比
  4. ElementUI的el-select怎样实现下拉多选并实现给下拉框赋值和获取值
  5. Path does not chain with any of the trust anchors
  6. Python脚本打包成exe文件
  7. 用Python拼图发一个高逼格的朋友圈
  8. 在青岛呆了两年之后,我明白了何为工资低消费高。。。
  9. 知识图谱(八)——知识存储和检索
  10. 用Scikit-learn和TensorFlow进行机器学习(三)