AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

如何建立微信考试?快考题|企考云,轻松拥有HR在线测评系统

亿欧之

springboot elementui vue商城微信小程序源码(毕设)

清风

小程序 Vue 毕业设计 毕设

2020年五面蚂蚁,分布式架构+RPC+kafka+多线程

欢喜学安卓

Java 程序员 后端

EMQ X VS RabbitMQ:两大消息服务器 MQTT 性能对比全解(上)

EMQ映云科技

RabbitMQ 物联网 IoT mqtt emq

数字人民币与智能合约

CECBC

ipfs最新官网通知?ipfs是一场技术革命?

区块链 分布式存储 IPFS Filecoin ipfs挖矿

平头哥玄铁CPU调试系统介绍

Roy夹馍

cpu risc-v 嵌入式开发 调试系统

人工智能是下一个“新生代农民工”吗?

澳鹏Appen

人工智能 大数据 AI 数据标注 训练数据

澳鹏Appen收购Quadrant:移动定位数据业务进一步增强

澳鹏Appen

人工智能 大数据 企业 收购

filecoin全网有效算力突破10EiB?Filecoin挖矿现在还有机会入场吗?

区块链 分布式存储 IPFS filecoin挖矿 filecoin矿机

解析金融服务如何在区块链中建立信任?

CECBC

财经大课:看懂价格信号

石云升

财经思维 9月日更

2020全网最新SQL优化面试专题及答案,一步搞定你疑惑的数据结构与算法系列

欢喜学安卓

Java 程序员 后端

托管班用什么管理系统?染书CRMA,自带营销工具提升续班率

亿欧之

在线考试系统有哪些?快考题|企考云,高频互动的培训功能免费用

亿欧之

服务网格在百度核心业务大规模落地实践

百度开发者中心

最佳实践 方法论 Service Mesh 服务网格

Vector向量计算技术与SIMD技术的对比

Roy夹馍

cpu IoT 芯片 risc-v

RVB2601开发板快速上手教程

Roy夹馍

MCU risc-v 嵌入式开发

1-7中HashMap死循环分析,透彻解析

欢喜学安卓

Java 程序员 后端

有道词典 Flutter 架构与应用

有道技术团队

大前端 客户端 网易有道

低代码和无代码的区别

低代码小观

低代码 开发工具 无代码 低代码与无代码区别

RVB2601开发板用户指南

Roy夹馍

IoT risc-v 嵌入式开发

Paxos理论介绍(3): Master选举

OpenIM

2021 Java开发 最全笔记 建议收藏!,搞定kafka看这一篇就够了

欢喜学安卓

Java 程序员 后端

如何创建网上试卷?快考题|企考云,专项练习降低人工阅卷失误率

亿欧之

平头哥剑池CDK 更新重磅来袭!三大亮点速看!

Roy夹馍

物联网 risc-v 嵌入式开发 软件模拟

一款神器自助帮你换背景,超强实时人像扣图算法开源啦!

百度开发者中心

最佳实践 图像处理 开源技术

2021年1月8号,这些新技术你们都知道吗

欢喜学安卓

Java 程序员 后端

30G上亿数据的超大文件,如何快速导入生产环境,全网疯传

Geek_f90455

Java 程序员 后端

从芯片到云全链路高效设计 一文了解YoC基础软件平台

Roy夹馍

物联网 risc-v 嵌入式开发

天津赛誉食品有限公司与小王庄黄金梨携手 助推文旅产业化联盟销售

InfoQ 天津

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