写点什么

ADO.NET 4.5 中的异步与流特性

  • 2012-06-03
  • 本文字数:925 字

    阅读完需:约 3 分钟

.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

2012-06-03 11:272263
用户头像

发布了 125 篇内容, 共 37.7 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

从负载均衡到路由,微服务应用现场一键到位

阿里巴巴云原生

阿里云 微服务 云原生 观测

ThreadLocal源码解析:巧用弱引用解决内存泄漏问题

程序员小毕

Java 源码 程序员 面试 高并发

ShareSDK Android端权限说明

MobTech袤博科技

android 开发者 sdk

阿里前端常见面试题(附答案)

coder2028

JavaScript 前端

京东前端常考面试题(附答案)

coder2028

JavaScript 前端

dapp智能合约系统开发技术流程分析

开发微hkkf5566

Java必会基础题,量不多,但每天进步一点也是好的

Java-fenn

Java

有“智慧”的电子牌

OpenHarmony开发者

OpenHarmony

下载超过 28762W 次的 Java面试题库(附答案)

Java-fenn

Java java面试 Java面试题

leetcode 110. Balanced Binary Tree 平衡二叉树(简单)

okokabcd

LeetCode 数据结构与算法

JAVA学习1_PATH环境变量配置

Java-fenn

Java

开单才是王道!亚马逊开店变现训练营,4周赚钱实战!

博文视点Broadview

【荣耀开发者服务平台—百亿曝光扶持等你来】智慧服务安卓卡片接入指南

荣耀开发者服务平台

手机 安卓 卡片服务 widget honor

Java 多线程:锁(一)

Java-fenn

Java

【Java入门】十八 面向对象的三大特征之一-继承

Java-fenn

Java

滴滴前端一面必会面试题汇总

hellocoder2029

JavaScript 前端

OceanBase 核心能力解读和支付宝实践|9月17日广州见

OceanBase 数据库

vue2数据响应式原理——依赖收集和发布订阅

海底烧烤店ai

Vue 前端 9月月更

vue2数据响应式原理——数据劫持(初始篇)

海底烧烤店ai

Vue 前端 9月月更

vue2数据响应式原理——数据劫持(数组篇)

海底烧烤店ai

Vue 前端 9月月更

「趣学前端」桂花留晚色,聊聊zlib压缩

叶一一

node.js 前端 9月月更

基于 PyTorch 和神经网络给 GirlFriend 制作漫画风头像

华为云开发者联盟

人工智能 神经网络 企业号九月金秋榜 漫画头像

【JAVA】基于GUI界面编程的水果“人生”模

Java-fenn

Java

给数据技术初学者:解读从数据编织到增强分析20个最新数据技术概念

雨果

数据湖 数据编织 数仓一体

为什么Java流行了这么久,而Scala来去匆匆?

Java-fenn

Java

2022年9月中国数据库排行榜:榜眼、探花纷纷易主,AnalyticDB蝉联榜单十强

墨天轮

数据库 opengauss TiDB 国产数据库 达梦

企业数据治理过程中都要经历的四个阶段?你的企业处在哪个阶段?

雨果

数据治理

严禁外传,字节跳动 2022 春招 Java 岗位架构师面试题(暂定版)发布

Java-fenn

Java 程序员 java面试 Java面试题

FreeRTOS记录(六、FreeRTOS消息队列—Enocean模块串口通讯、RAM空间不足问题分析)

矜辰所致

内存管理 消息队列 FreeRTOS 9月月更

LeetCode-24. 两两交换链表中的节点(Golang)

bug菌

9月日更 Leet Code 9月月更

一起学习ML和DL中常用的几种loss函数

华为云开发者联盟

人工智能 企业号九月金秋榜

ADO.NET 4.5中的异步与流特性_语言 & 开发_Jonathan Allen_InfoQ精选文章