2009-12-22 6 views
1

Ceci est un problème que mon ami a demandé par téléphone. Le programme C# 3.5 qu'il a écrit est en train de remplir un jeu de données à partir d'une table de maître du patient qui compte 350 000 enregistrements. Il utilise le pilote Microsoft ADO.NET pour Oracle. La méthode ExecuteQuery prend plus de 30 secondes pour remplir l'ensemble de données. Cependant, la même requête (extraction d'environ 20K enregistrements) prend moins de 3 secondes dans Toad. Il n'utilise aucune transaction dans le programme. Il a un index sur la colonne (Nom) qui est utilisée pour la recherche.Lent dans le remplissage .NET DataSet d'Oracle 9i

Voici quelques alternatives i proposées: -

1) Essayez d'utiliser un lecteur de données, puis remplir un tableau de données et de le transmettre à la forme de la lier à la boîte Combo (ce qui est une bonne idée car il est susceptible de prendre en même temps)

2) Essayez Oracles' ADO.NET pilote

3) Utilisez les fourmis profileur pour voir si vous pouvez identifier une ligne de ADO.NET particulière.

Est-ce que quelqu'un a fait face à des problèmes similaires et quelles sont les façons de résoudre ce problème.

Merci, Chak.

+0

Est-ce que la requête dans Toad récupérer toutes les lignes ou tout simplement la première 100 ou 1000? – Theo

+0

La requête Toad récupère environ 20 K enregistrements. Data Reader prend également quelques secondes - c'est l'ensemble de données qui prend 30 secondes. – Chakra

Répondre

0

Sans connaître le code qu'il utilise pour accomplir ses tâches et ne pas connaître le nombre de lignes qu'il va chercher (j'espère qu'il ne lit pas tous les 350K), il est impossible de dire quoi que ce soit qui puisse l'aider .

Demandez-lui d'ajouter un extrait de code à la question pour plus de clarté.

+0

Il utilise simplement un DataAdaptor.Fill – Chakra

1

En règle générale, Toad ne récupère que les x premières lignes (500 dans ma configuration). Donc, vérifiez si la comparaison est valide.

Ensuite, vous devriez essayer de séparer les choses db de la substance de forme si possible pour voir si le db prend le temps. Si c'est le cas, essayez les bibliothèques Oracle si cela est plus rapide, nous avons vu 50% d'améliorations entre le dernier pilote Oracle et le pilote Microsoft standard.

+0

La substance DB est dans la couche de gestion - désolé de donner l'impression qu'il est dans la couche de l'interface utilisateur. La conclusion à laquelle nous sommes parvenus est que l'utilisation d'un DataSet/DataTable a son propre surcoût qui tient compte de ce délai de 30 secondes. – Chakra