Oracle
 sql >> база данни >  >> RDS >> Oracle

Защо OracleDataAdapter.Fill() е много бавен?

Този код ми помогна, опитайте го:

using (OracleConnection conn = new OracleConnection())
{
     OracleCommand comm = new OracleCommand();
     comm.Connection = conn;
     comm.FetchSize = comm.FetchSize * 16;
     comm.CommandText = "select * from some_table";

     try
     {
          conn.Open();
          OracleDataAdapter adap = new OracleDataAdapter(comm);
          System.Data.DataTable dt = new System.Data.DataTable();
          adap.Fill(dt);
     }
     finally
     {
          conn.Close();
     }
}

Трикът е в съответствие (опитайте стойности от 8 до 64, за да намерите най-доброто за вашия случай):

comm.FetchSize = comm.FetchSize * 16;

АКТУАЛИЗАЦИЯ:

Ето един подобрен код:

OracleConnection myConnection = new OracleConnection(myConnectionString);
OracleCommand myCommand = new OracleCommand(mySelectQuery, myConnection);
myConnection.Open();
using (OracleDataReader reader = myCommand.ExecuteReader(CommandBehavior.CloseConnection))
{
    // here goes the trick
    // lets get 1000 rows on each round trip
    reader.FetchSize = reader.RowSize * 1000;

    while (reader.Read())
    {
        // reads the records normally
    }
}// close and dispose stuff here

От тук



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изключение на Java Oracle - максималният брой изрази в списък е 1000

  2. Oracle изберете най-новия запис за дата

  3. Devart dotConnect за Oracle във Visual Studio 2015 - проблеми със съвместимостта

  4. Проблеми при превключване на .NET проект от неуправляеми към управлявани ODP.NET сборки

  5. Oracle PL/SQL - Изключенията NO_DATA_FOUND лоши ли са за производителността на съхранената процедура?