Я обрабатываю данные из Oracle Data Reader в С#, который имеет в среднем около 10000 строк данных. Есть ли способ сделать обработку параллельно, так что каждый процессор может заставить его поворачиваться при чтении следующей строки из одного и того же считывателя данных и записи его в ту же таблицу? При последовательном выполнении этот процесс занимает около 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++;
}
Конечный результат состоит в том, чтобы все строки были записаны в электронную таблицу. Может кто-то, пожалуйста, помогите мне, поскольку я новичок в параллельном программировании? Заранее спасибо.
Ваша проблема не в считывании данных. Я обычно трачу десятки или сотни тысяч записей из Oracle через считыватель данных за считанные секунды (и делаю для нескольких коммерческих инструментов).
Либо связь с базой данных ограничивает вашу скорость передачи, либо ваш API таблиц доминирует над всей операцией.
Моя рекомендация состоит в том, чтобы отделить контур считывателя от сборки электронной таблицы.
Это предложение позволяет отслеживать время отдельно. Я честно считаю, что используемая вами таблица электронных таблиц может быть узким местом, поскольку я обычно не имею такой производительности при экспорте Oracle в Excel. Возможно, попробуйте другую библиотеку электронных таблиц.