.NET 4.5为仍在选择直接与DataReader系列类打交道的.NET开发人员带来了一些新的异步与流特性支持。SqlDataReader允许开发人员在减少一些便利性的基础上获得更好的性能。例如,该类不管需要从服务器等待多少个数据包,通常都会一次性读取整行。如果有多个大型对象列,SqlDataReader会将它们一次性存储进内存中。如果你切换至顺序访问,那么将不再需要缓存整行,不过必须按照顺序对列进行读取。

借助.NET 4.5中的顺序访问,开发人员可以有选择地使用NextResultAsync、ReadAsync、IsDBNullAsync与GetFieldValueAsync进一步地调整性能。需要澄清一点的是,ADO.NET的异步方法不会自动提升性能,并且对于单线程提速可能毫无作用。不过,它们可以提升处理大量并发请求时的性能,因为它们减少了线程阻塞。底层你需要做的是构建Task对象,要注意这会对垃圾收集器造成压力。一般来说,我们建议:

  1. 尽可能地使用NextResultAsync异步处理数据包;
  2. 在两个模式下都优先选择ReadAsync以使大量数据包再次被异步处理;
  3. 不要在顺序模式下使用IsDBNullAsync与GetFieldValueAsync。列在该模式下已经被缓存,因此创建Task对象没什么作用。

对于顺序模式,决定是否使用GetFieldValueAsync 稍微有些复杂,Daniel Paoliello解释说:

不管怎样,如果你在非线性访问模式调用Read,或者如果你正在使用线性访问模式,那么决定将会非常困难,因为你需要考虑从目标列读取多少数据以及该列包含多少数据。如果你已经读完了前一列,并且目标列较小(如Boolean、DateTime或数字类型),那么你也许可以考虑使用一个同步方法。相反,如果目标列较大(如varbinary(8000))或者你需要读取以前的数据较多的类,那么使用一个异步方法可能会更好。最后,如果目标列数据非常大(如varbinary(MAX)、varchar(MAX)、nvrchar(MAX)或XML),那么你应当取而代之考虑新的GetStream、GetTextReader和GetXmlReader方法。

当与存储在数据库中的大文件打交道时,使用基于流的方法会有一些好处。例如,你可以将流转换至WCF或ASP.NET响应,而不用一次向将整个文件读进内存。这对于.NET开发人员尤为重要,因为大对象堆对于存储碎片非常敏感。

查看英文原文:In Case You Missed It: Async and Streaming for ADO.NET 4.5

Refer:http://www.infoq.com/cn/news/2012/06/ADO-Async

转载于:https://www.cnblogs.com/Irving/p/4364753.html

ADO.NET 4.5中的异步与流特性相关推荐

  1. python 异步io_Python中的异步IO:完整的演练

    python 异步io Async IO is a concurrent programming design that has received dedicated support in Pytho ...

  2. 转:在 .NET 中实现异步回调访问数据库

    在 .NET 中实现异步回调访问数据库 时间:2009-11-17 19:52来源:网络收集 作者:佚名 点击: 334 次 技术论坛 某些场合下,在对数据库进行访问时,为了避免同步访问数据时所带来的 ...

  3. ADO.NET 2.0 中的架构

    Bob Beauchemin DevelopMentor 适用于: Microsoft ADO.NET 2.0 Microsoft Visual Studio 2005 C# 编程语言 摘要:了解在 ...

  4. [译] Don’t call me, I’ll call you:使用 Redux-Saga 管理 React 应用中的异步 action (上)...

    原文地址:Don't call me, I'll call you: Side effects management with Redux-Saga (Part 1) 原文作者:David Dvora ...

  5. 今天谈一谈python自动化测试中使用异步

    很早已经在项目中使用异步了,比如使用的web框架fastapi就是支持异步写法的,然而,我只学会了 async/await 的写法,可是这种写法真的可以让你的程序变快吗? 异步的概念 同步 异步 同步 ...

  6. Spring中的异步任务

    为什么80%的码农都做不了架构师?>>>    问题 项目中需要异步调用第三方服务,不需要关心是否调用成功.之前在文章<Spring task的异步定时任务>中使用的xm ...

  7. Spring5源码解析-Spring中的异步事件

    上一篇 Spring框架中的事件和监听器并未对Spring框架中的异步事件涉及太多,所以本篇是对其一个补充. 同步事件有一个主要缺点:它们在所调用线程的本地执行(也就是将所调用线程看成主线程的话,就是 ...

  8. 跟着 Event loop 规范理解浏览器中的异步机制

    原文发自我的 GitHub blog,欢迎关注 前言 我们都知道 JavaScript 是一门单线程语言,这意味着同一事件只能执行一个任务,结束了才能去执行下一个.如果前面的任务没有执行完,后面的任务 ...

  9. JavaScript中的异步梳理(0)

    JavaScript中有大量异步操作,首先可以看看JS中什么东西会产生异步(这里先只考虑浏览器里的情况): Ajax(XMLHttpRequest) Image Tag,Script Tag,ifra ...

最新文章

  1. 我们小时候,开学是这样的!差点看哭了!
  2. HTML框架,链接,登录,注册联合应用
  3. python实时获取子进程输出_Python 从subprocess运行的子进程中实时获取输出的例子...
  4. Visual Studio Code设置断点时出现Unverified breakpoint该咋办
  5. 一、css清除浮动方法学习笔记总结(超详细,简单易懂)
  6. java 接口中变量修饰符,Java的访问修饰符与变量的作用域讲解
  7. 楼宇计算机网络是如何工作的,【干货】建筑楼宇智能化如何应用 4C 技术
  8. CCF 201612-2 工资计算 java 解题
  9. IBM 340亿美元收购红帽,开源史上最大交易!
  10. XML PUBLISHER输出excel存在科学计数
  11. 腾讯裁员内幕:顶层反思推动,PCG与CSIG影响最大
  12. 洛谷—— P2251 质量检测
  13. 如何阅读Java源码 阅读java的真实体会
  14. 【Windows】PPT播放视频提示媒体不可用的解决方法
  15. 汇编语言(十二)颜色搭配显示+BIOS功能调用表+INT 10H功能详细列表
  16. Zotero如何更改字体大小
  17. 曾国藩36字深入解读-借智慧
  18. 一款简单的语音播报app
  19. 个人简历网页搭建(快速搭建GitHub Pages和Apache)
  20. [超级码力在线编程大赛初赛(二)] 4.小栖的金字塔 施罗德数(超级卡特兰数)

热门文章

  1. 【C++】 C++标准模板库(七) MultiSet
  2. oledb vc访问mdb数据库_SQL SERVER数据库技术-1
  3. 清晰版 构建最高可用oracle数据库系统.pdf,构建最高可用Oracle数据库系统
  4. mysql子查询是什么_mysql子查询
  5. 最新最全的java多线程基础总结(上)
  6. C代码+汇编 C的for汇编学习分析
  7. IDA Pro 搜索中文字符串
  8. 张朝阳:我什么都有,但我就是很痛苦
  9. CentOS密码忘记后的操作
  10. 开始体验Kali Linux