写点什么

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

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

关注

评论

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

FotoJet Designer(图形设计软件)特别版下载

iMac小白

Disk Drill for Mac(数据恢复软件) v5.5.1515中文激活版

iMac小白

Disk Drill for Mac Disk Drill下载 Disk Drill mac

win版DxO FilmPack 7(照片模拟胶片效果处理)v7.6.0.515 (x64)特别版

iMac小白

DxO FilmPack 7 DxO FilmPack 7下载 DxO FilmPack 7破解版

win版 Navicat Premium 16(数据库管理软件)中文特别版

iMac小白

Navicat Premium 16下载 Navicat Premium 16激活 Navicat Premium 16破解

权威答案!灵犀医疗引入 Zilliz Cloud,千万级向量数据库赋能医学 AIGC 平台

Zilliz

Zilliz AIGC zillizcloud 灵犀医疗

信创里程碑:Tapdata 同时通过华为云 GaussDB 及鲲鹏兼容互认证,全面支持基础设施自主创新建设

tapdata

华为云 GaussDB 华为云公有云平台(鲲鹏)

OneCommander Pro(双窗口文件管理工具)v3.75.1.0 特别版

iMac小白

“小瓦AI答”全新升级

Laval小助手

软件开发生产线CodeArts 4月新特性预告,一睹为快!

华为云PaaS服务小智

软件开发 华为云

剪切板复制粘贴管理工具 Paste for mac中文激活版

iMac小白

Paste for Mac paste mac破解版 Paste 下载

Icecream Screen Recorder Pro(屏幕录像软件)

iMac小白

FotoJet Designer(图形设计软件)v1.3.3 特别版+便携版

iMac小白

FotoJet Designer下载 FotoJet Designer mac

这些Git事故灾难, 你经历过几个?

EquatorCoco

git

聚道云软件连接器助力企业实现滴滴出差报销自动化

聚道云软件连接器

案例分享

智能工单,一键报障|云智慧轻帆云打造连锁企业服务管理新体验

云智慧AIOps社区

运维 IT服务管理 工单管理 工单系统 智能工单

Adobe Bridge 2024(Br2024) v14.0.4.222 (x64)直装版

iMac小白

MQTT Broker 白皮书:全面实用的 MQTT Broker 选型指南

EMQ映云科技

mqtt mqtt broker

Axure RP 9 for mac激活版 交互式产品原型设计工具

iMac小白

Axure RP 9汉化 Axure RP 9授权码 Axure RP 9破解版

深入分析C++对象模型之移动构造函数

爱分享

c++ 性能优化 代码优化 C++构造函数 C++移动构造函数

火山引擎数据飞轮行业研讨会在京举行 聚焦互联网企业数智化升级

字节跳动数据平台

大数据 数字化转型 云服务 火山引擎 企业号 4 月 PK 榜

从源码到实战:探寻App中的等待神秘力量,强制等待 vs 隐式等待对决

测吧(北京)科技有限公司

测试

跨境电商新篇章:alibaba.item_get API接口助力商家精准营销

技术冰糖葫芦

api 货币化 API 接口 pinduoduo API

架构设计|基于 raft-listener 实现实时同步的主备集群

快乐非自愿限量之名

Java 架构 运维

低代码与前端开发的未来:走向更高效的创新

EquatorCoco

HarmonyOS 性能优化

不在线第一只蜗牛

HarmonyOS 鸿蒙系统

探索“人工智能+”战略下的企业切入点

不在线第一只蜗牛

Elasticsearch 原理与在直播运营平台的实践

字节跳动云原生计算

搜索 ES

我用这10招,能减少了80%的BUG

快乐非自愿限量之名

软件开发 bug

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