在.Net中并行读取Oracle数据读取器中的数据

本文关键字:数据 读取 Net Oracle 并行 | 更新日期: 2023-09-27 18:27:40

我正在C#中处理来自Oracle data Reader的数据,该阅读器平均约有10000行数据。有没有一种方法可以并行处理,这样每个CPU就可以轮流从同一个Data Reader读取下一行,并将其写入同一个电子表格?在顺序执行中,这个过程大约需要10-15分钟,这是我的顺序代码。

OracleCommand cmd = new OracleCommand(select_query, connection);
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read()){
    for(int i = 1; i <= reader.FieldCount; i++){
        worksheet[counter, i] = reader.GetValue(i).ToString();
    }
    counter++;
}

最终的结果是将所有的行都写入到电子表格中。有人能帮我吗,因为我是并行编程的新手?提前谢谢。

在.Net中并行读取Oracle数据读取器中的数据

问题不在于数据读取器。我通常在几秒钟内通过数据读取器从Oracle中提取数万或数十万条记录(对于一些商业工具也是如此)。

要么是数据库链接限制了传输速度,要么是电子表格API主导了整个操作。

我的建议是将阅读器循环与电子表格构建解耦。

  1. 将所有10000行读取到值的列表/数组中
  2. 迭代值数组,构建电子表格

这个建议是为了让你可以单独追踪时间。老实说,我认为您使用的电子表格API可能是瓶颈,因为我通常在将Oracle导出到Excel时没有这种性能。也许可以尝试不同的电子表格库。