Я испытываю ужасное качество чтения данных с объекта OracleDataReader по сравнению с MS SQL Server. Это почти в 10 раз медленнее, что неприемлемо.Плохая производительность с OracleDataReader
Ниже приведен пример тестового кода примера, который используют оба теста. Какой самый оптимальный способ чтения данных из OracleDataReader, есть ли лучший способ, чем показано ниже?
Мне нелегко полагать, что ODP.Net не может сравниться с SqlClient.
ОБНОВЛЕНИЕ: Я сузил проблему с получением текстовых полей. По какой-то причине ODP.Net ужасен в этом. Есть идеи, как это исправить?
void ReadData(System.Data.IDataReader dr, int maxRows)
{
ArrayList rows = new ArrayList(maxRows > 0 ? maxRows : 1000);
object[] row;
int rowsRead = 0;
while (dr.Read() && ((maxRows == -1) || (rowsRead++ < maxRows)))
{
row = new object[dr.FieldCount];
dr.GetValues(row);
rows.Add(row);
}
rows.Clear();
}
Примечание (ы):
Пробовал экспериментировать с FetchSize, не испытывал большой разницы
Запрос пробег раз не проблема здесь, только извлечение данных ,
Структуры данных на обеих базах данных идентичны.
Пробная комбинация DataAdapter/DataSet с аналогичными результатами.
Извините за очевидный вопрос, но индексируются ваши таблицы? –
Вы не можете сравнить ODP.Net vs SQL, один - поставщик данных, другой - сервер/движок. Используете ли вы последнюю версию ODP.NET? –
@Brian Структуры данных в обеих базах данных идентичны. И производительность выполнения запроса не является проблемой. Только поиск данных. @ o.k.w Я хотел сказать SqlClient, а не SQL. –