写点什么

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:272147
用户头像

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

关注

评论

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

ARTS 薪火重启之第二周

渣渣辉

如何在App里拉起小程序?

没有用户名丶

直播APP开发,协议盘点(五):实时传输协议RTP

山东布谷科技

软件开发 rtp APP开发 直播APP开发 实时传输协议

避雷干货丨初创或中小企业公司该如何选择云服务器?

YG科技

专业PDF编辑和阅读软件:PDF Expert for mac激活中文

胖墩儿不胖y

PDF编辑 pdf编辑工具 编辑pdf

选择LED显示屏的点间距指南

Dylan

像素 LED显示屏 led显示屏厂家 屏幕

以财证道,终身成长

少油少糖八分饱

读书笔记 思维 搞钱 致富 有钱人

电商店铺管理,为何需要华为云云耀云服务器L实例

YG科技

R语言之数据获取操作

timerring

R 语言

KaiwuDB 荣获哈佛商业评论 2023“高能韧性团队奖”

KaiwuDB

KaiwuDB 高能韧性团队

【聚梦想 创非凡】首场荣耀开发者沙龙(上海站)圆满落幕

荣耀开发者服务平台

图智能在反洗钱方向的应用实践丨Fabarta 技术专栏

Fabarta

图计算 图分析 反洗钱 图智能 智能风控

国内智慧工业的实践,在一首曙光《长歌行》中

脑极体

AI 算力 数智化 曙光

k8s发布应用

tiandizhiguai

微服务 云原生 k8s

透彻了解 JavaScript 闭包:使用场景和常见问题解答

Apifox

JavaScript 编程 前端 后端 闭包

IEEE-802.11be-QSDK-IIOT-IPQ9574-IPQ9554-QCN9274-QCN6274-Throughput 30Gbps-4096-QAM-16x16 MIMO

wifi6-yiyi

802.11be

代码随想录Day48 - 动态规划(九)

jjn0703

ARTS 打卡第 13 天

自由

利用大模型反馈故障的解决方案

观测云

根因分析 自动化运维

C++头文件和std命名空间

智趣匠

Kyligence Copilot 登陆海外,斩获 Product Hunt 日榜 TOP 2

Kyligence

指标平台 Kyligence Copilot 数据分成

Parallels Desktop 19 for Macv19.0.0启动器激活教程 无需关闭SIP

晴雯哥

代码随想录Day49 - 动态规划(十)

jjn0703

云原生批量计算引擎 Volcano社区v1.8.0版本正式发布

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

科兴未来 | 百万奖金!香港科大,2023人工智能国际创业大赛启动!

科兴未来News

人工智能 双创比赛 香港科大 香港

Parallels Desktop 19 Mac 虚拟机值得更新吗

晴雯哥

NineData中标!移动云数据库传输项目(2023)

NineData

移动云 玖章算术 NineData 中标 数据库传输

探索GreatADM:图形化部署MGR的全新体验

GreatSQL

自动化平台 greatsql

MurmurHash 真的比 MD5 速度快吗?

向东是大海

murmurhash

ARTS 打卡第 2 周(8.21~8.27)

向东是大海

ARTS 打卡计划

HTML文本编辑器:BBEdit for Mac注册码激活

mac大玩家j

Mac 软件 代码编辑

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