【问题标题】:How to change buffer size of SqlDataReader in C#?如何在 C# 中更改 SqlDataReader 的缓冲区大小?
【发布时间】:2017-06-07 08:10:45
【问题描述】:

我正在使用SqlDataReader 进行数据迁移。如何增加一次插入目标的记录数?

【问题讨论】:

  • 但是... sqldatareader 不执行 插入... 所以:您使用什么 进行插入?如果它类似于 sqlbulkcopy,那么 that 有多种方法可以调整批量大小(即:缓冲区大小) - 最重要的是 .BatchSize
  • 说实话我不明白,你想要什么:-|
  • 我认为 OP 的意思是他想增加用于将记录“插入”到目的地(数据库 = 源,客户端 = 目的地)的缓冲区,以便读取记录。我不确定,但我认为这取决于您无法以编程方式更改的网络缓冲区和数据库驱动程序(usually 8kilobytes)。
  • 实际要求是将数据从sql server迁移到postgres。代码使用sqldatareader从源读取数据并使用npgsql将数据插入目标。已知默认情况下sqldatareader一次可以保存8kb数据(不确定)。我想知道 sqldatareader 一次可以处理多少数据,是否有可能增加...
  • @saju 你有什么理由想要这样做吗?通常,任何读取器都会胜过任何写入器,因此您不太可能有一个空缓冲区。是什么让你认为增加这个值会有用?你希望通过做什么来实现什么?

标签: c# sqldatareader


【解决方案1】:

我想增加一次插入到目的地的记录数。

那么这与SqlDataReader 无关,您需要查看用于插入的任何工具。如果您使用的是SqlBulkCopy,那么这应该像更改.BatchSize 一样简单。如果您使用其他机制,则必须具体。例如,如果您使用 SP 执行一次只处理一行的插入,则一种选择可能是使用 MARS 和重叠 async 操作;我有一个实用方法,用于这种类型的顺序固定深度重叠(这与Parallel.ForEach 所做的非常不同,例如,即使使用固定的最大 DOP)。如果您使用的是通过基于 TDS 的表参数工作的插入,那么:只需在调用操作之前在本地缓冲那么多数据。如果您使用的是 EF 等 ORM:请参阅 ORM 的插入文档。

但是:要强调的是:没有对此投票的一件事是:数据读取器。

【讨论】:

  • 实际要求是将数据从sql server迁移到postgres。代码使用sqldatareader从源读取数据并使用npgsql将数据插入目标。已知默认情况下sqldatareader一次可以保存8kb数据(不确定)。我想知道 sqldatareader 一次可以处理多少数据,是否有可能增加......所有这些都在单个服务器中完成,而不是在网络中。
猜你喜欢
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 2019-10-01
  • 1970-01-01
相关资源
最近更新 更多