有没有比.NET中的SqlDataReader更快的东西?

wat*_*rif 40 c# sql sql-server ado.net sqldatareader

我需要使用C#将SqlServer上的表中的一列字符串加载到内存中的Array中.有没有比打开SqlDataReader更快的方法并循环它.表很大,时间很关键.

编辑我正在尝试构建.dll并在服务器上使用它来进行数据库上的某些操作.但现在要放慢速度.如果这比我重新设计数据库要快.我很难有可能有一些解决方案如何加快速度.

bad*_*d99 52

数据阅读器

关于最快的访问,你将获得SQL与SqlDataReader.

简介它

值得实际分析您的性能问题.通常,在您认为性能问题出现之后,在您对其进行分析后证明是完全错误的.

例如,它可能是:

  1. 时间...查询需要运行
  2. 时间......数据需要通过网络/进程边界进行复制
  3. 时间...... .Net将数据加载到内存中
  4. 时间......你的代码需要用它做点什么

单独分析这些内容可以让您更好地了解瓶颈的位置.为了分析您的代码,有一篇来自Microsoft精彩文章

缓存它

看的东西在提高性能是制定出如果你需要在每次加载所有的数据.可以缓存列表(或其中的一部分)吗?看一下新的System.Runtime.Caching命名空间.

重写为T-SQL

如果您正在进行纯粹的数据操作(正如您的问题所示),您可以重写使用数据为T-SQL并在SQL上本机运行的代码.这有可能更快,因为您将直接处理数据而不是转移它.

如果您的代码具有许多必要的过程逻辑,您可以尝试将T-SQL与CLR集成混合,为您提供两个世界的好处.

这很大程度上归结为逻辑的复杂性(或更多程序性).

如果一切都失败了

如果所有区域都是最佳的(或接近),并且您的设计没有错误.我甚至不会进入微优化,我只是扔硬件.

什么硬件?尝试使用可靠性和性能监视器来找出瓶颈的位置.最有可能解决您描述HDD或RAM的问题.

  • +1"重写为T-SQL".理想的查询只能检索绝对必要的数据.如果你要检索100k行到客户端应用程序,然后在那里处理,那么也许你应该重新考虑你的逻辑. (2认同)

Ste*_*ven 19

如果SqlDataReader速度不够快,也许你应该将你的东西存储在其他地方,比如(内存中)缓存.


小智 17

不,它实际上不仅是最快的方式 - 它是唯一的(!)方式.所有其他机制无论如何都在内部使用DataReader.


Luk*_*keH 9

我怀疑这SqlDataReader和你一样好.

  • 哈!任何一位贬低者都会关心这个答案的错误吗? (3认同)

sof*_*eda 5

SqlDataReader是最快的方法.确保使用get by序数方法而不是按列名称获取.例如GetString(1);

同样值得的是在连接字符串中试验MinPoolSize,以便池中始终存在一些连接.