GetValue assez lent pour récupérer un champ CLOB d'ORACLE
Bonjour,
Dans un programme de statistique, je dois passez en revue une certaine quantité de ligne d'une table Oracle pour effectuer des stats.
Il s'agit d'une ré écriture d'un code VB6 donc j'ai les 2 versions pour comparer les performances.
En gros mon code en c# est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
DbCommand cmdBio;
DbDataReader drBio;
cmdBio = varGlobals.connection.CreateCommand();
cmdBio.CommandText = "SELECT * FROM bio_contenu WHERE numpat=" + NumPat.ToString() + " AND dtebio < '" + varGlobals.dteEnd.AddDays(31).ToShortDateString() + "' AND dtebio >= (SELECT max(dtebio) FROM bio_contenu WHERE numpat=" + NumPat.ToString() + " AND dtebio <= '" + FirstSeanceDate.Value.ToShortDateString() + "') ORDER BY dtebio DESC";
cmdBio.CommandType = System.Data.CommandType.Text;
cmdBio.CommandTimeout = 120;
drBio = cmdBio.ExecuteReader();
string sValeur = "";
while (drBio.Read())
{
sValeur = drBio.GetValue(drBio.GetOrdinal("compterendu").ToString();
} |
Sur 120 enregistrement ce code prend environ 10 secondes contre 2 pour son équivalent VB6
En VB6 c'est ADO qui est utilisé avec un client oracle 11 et une DB oracle 11.
En C# j'utilise les classes style DbProviderFactory car j'ai créé une librairie me permettant de me connecter à plusieurs type de DB. Le provinder utilisé dans ce cas provient de la dll system.data.oracleclient (également via un client oracle 11 sur la même db).
Quelqu'un aurait il une idée pour améliorer les performances ?