Is there any performance gain from CommandBehavior.SequentialAccess?(CommandBehavior.SequentialAccess 是否有任何性能提升?)
问题描述
我意识到我总是按照索引返回的顺序读取我的字段(使用常量).因此,据我了解,我的代码已经与 CommandBehavior.SequentialAccess 兼容.
I realized I always read my fields in the order they are returned by index (using constants). So my code is already compatible with CommandBehavior.SequentialAccess as far as i understand.
如果我打开它会有什么好处吗?DataReader 已经是只转发了,只读哪个才是真正的性能提升吧?
Would there be any benefits if i turn it on? DataReader is already forward only, read only which is the real performance gain right?
推荐答案
这个的主要用途是当你读取非常大的 CLOB (nvarchar(max) etc) 或 BLOB (varbinary(max)) 字段.在默认用法中,它会在让您靠近它之前缓冲整行数据 - 这可能意味着它必须为任何 BLOB/CLOB 字段分配一个大缓冲区.当使用顺序模式时,它不缓冲行;您可以将常规 API 用于小字段(只要您以正确的顺序访问它们),但对于 CLOB/BLOB 字段,您可以使用基于块的 API (GetBytes 和 GetChars) 依次访问数据的一部分.例如,通过这样做,您可以仅使用 1k 或 4k 缓冲区来处理 40 MB 的图像.
The main usage of this is when you are reading very large CLOB (nvarchar(max) etc) or BLOB (varbinary(max)) fields. In the default usage, it buffers the entire row of data before letting you near it - which could mean it has to allocate a large buffer for any BLOB / CLOB fields. When using sequential mode, it does not buffer the row; you can use the regular API for small fields (as long as you access them in the correct order), but for the CLOB / BLOB fields you can use the chunk-based APIs (GetBytes and GetChars) to access fractions of the data in turn. By doing this you could, for example, process a 40 MB image using only a 1k or 4k buffer.
MSDN 也这么说
为 DataReader 提供一种方法来处理包含具有较大二进制值的列的行.SequentialAccess 不是加载整个行,而是使 DataReader 能够将数据作为流加载.然后,您可以使用 GetBytes 或 GetChars 方法指定开始读取操作的字节位置,以及返回数据的有限缓冲区大小.
Provides a way for the DataReader to handle rows that contain columns with large binary values. Rather than loading the entire row, SequentialAccess enables the DataReader to load data as a stream. You can then use the GetBytes or GetChars method to specify a byte location to start the read operation, and a limited buffer size for the data being returned.
这篇关于CommandBehavior.SequentialAccess 是否有任何性能提升?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:CommandBehavior.SequentialAccess 是否有任何性能提升?
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- 在 LINQ to SQL 中使用 contains() 2022-01-01
- 使用 rss + c# 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
