【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

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

关注

评论

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

DevSecOps | 极狐GitLab 动态应用程序安全测试(DAST)使用指南

极狐GitLab

DevOps gitlab 运维 测试 CI/CD

李小龙的话道出了移动端“小程序化”的核心——似水无形

FinClip

腾讯云数据安全中台保护方案获“首届全国商用密码应用优秀案例”

腾讯安全云鼎实验室

云安全

Shuttle + Alluxio 加速内存Shuffle起飞

Alluxio

开源 OPPO Alluxio spark SQL 8月月更

商派oneX新零售系统上架华为云云商店,首次参与“828企业节”

神奇视野

“小程序化”如何助力智慧产业园区建设破题?

FinClip

“中国建筑业竞争力百强”中化二建如何做知识管理?

sofiya

开发制作数字藏品app原理

开源直播系统源码

NFT 数字藏品 数字藏品开发 数字藏品系统

喜报 | 博睿数据两项发明专利获得国家知识产权局授权,累计发明专利11项

博睿数据

APM 可观测性 博睿数据 智能运维AIOps 发明专利

如何用文字让 ta 动心?

图灵教育

4 天 7 条 PR,80% 代码覆盖率,开源是「内卷」还是修炼?

腾源会

开源 腾源会 开源摘星计划

Spark Optimizer 规则下的 BUG 排查与修复全记录

观远数据

saprk

Java更改 PDF 页面大小

在下毛毛雨

追一科技携手华为云助力中小企业数字化,Face虚拟数字人亮相828企业节

sofiya

招行架构师徐佳航:金融云原生与开源标准的共同生长

阿里巴巴云原生

阿里云 开源 容器 云原生 KubeVela

万物皆可集成系列:低代码释放用友U8+深度价值(3)— 数据融合应用

葡萄城技术团队

【数据结构实践】手把手带你简单实现Python自定义栈

迷彩

数据结构 算法 堆栈 8月月更

最新首发!这份 Github 星标 8K 的 Redis 高级笔记真是yyds

了不起的程序猿

Java redis JAVA开发 java程序员

Logstash

平凡人生

MySQL基础笔记

楠羽

#开源

一次纯线上接口异常的排查过程

南城FE

node.js 前端

如何用文字让 ta 动心?

图灵社区

世界人工智能大会阿里巴巴专场论坛《数字时代的技术责任》来了!

阿里技术

ARM 内核寄存器 和 基本汇编语言讲解

矜辰所致

汇编语言 8月月更 ARM内核 内核寄存器

在公司内部,做了一次 HTTP(S) 的分享

程序员小毕

程序员 面试 程序人生 https 计算机网络

C#/VB.NET:删除PDF文档中的页面

Geek_249eec

C# VB.NET 删除PDF页面

「Java」本地文件上传下载预览

价投小邱

文件 下载 文件上传 #java

《中国车联网TSP行业发展洞察2022》案例征集

易观分析

车联网 案例征集

浅聊一下邮件通知的批量推送

为自己带盐

dotnetcore 8月月更 邮件发送

Python自学笔记6-列表有哪些常用操作

和牛

Python 测试 8月月更

如果重新学计算机

价投小邱

Linux 计算机网络 操作系统

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