У меня есть несколько процедур Oracle, которые генерируют/возвращают большой объем данных, которые мне нужно записать в файл. В настоящее время я пытаюсь выполнить с помощью считывателя данных. Кажется, это работает, я успешно сгенерировал файл размером 479 МБ без каких-либо проблем. С момента получения dataReader до завершения файла прошло менее 4 минут.
Но dataReader, который я получаю для конкретной процедуры, сканирует. Это невероятно медленно. Я изменил свой код, чтобы попытаться лучше понять, что происходит....
System.Diagnostics.Debug.Write("Performing .Read() on DataReader: ")
Dim d1 As DateTime = DateTime.Now
Dim result As Boolean = myDataReader.Read()
Dim ts As TimeSpan = DateTime.Now.Subtract(d1)
System.Diagnostics.Debug.WriteLine(ts.ToString)
Интересно то, что мой вывод в конечном итоге выглядит так:
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:07:33.5037500
Я действительно в недоумении, что делать дальше. Я не вижу ничего уникального или необычного в строке, занимающей 07:33.5037500. Какие-либо предложения?
ИЗМЕНИТЬ:
Спасибо за ответы всем. Во-первых, насколько я могу судить, никаких исключений не выбрасывается. Как было предложено, я взглянул на эту конкретную процедуру, которая демонстрирует поведение, описанное выше, и хотя процедура смехотворно массивна; но похоже, что он использует много курсоров для заполнения временной таблицы оракула. Возвращаемый Ref Cursor — это SELECT * FROM этой временной таблицы.
Я пишу блок PL/SQL, который откроет этот курсор, чтобы увидеть, существует ли проблема с производительностью, когда я удаляю код .Net... надеюсь, это поможет; но если у вас есть какие-либо дополнительные мысли, это будет очень признательно.
Еще раз спасибо. Похоже, это проблема PL/SQL, а не проблема .NET.