J'ai quelques procédures Oracle qui génèrent/retournent une grande quantité de données que j'ai besoin d'écrire dans un fichier. J'essaye actuellement d'accomplir avec un lecteur de données. Il semble fonctionner, j'ai réussi à générer un fichier 479mb sans aucun problème. Il a fallu moins de 4 minutes à partir du moment où j'ai récupéré le dataReader pour terminer le fichier.Problèmes de grande performance avec Oracle DataReader dans .Net
Mais le dataReader que je reçois pour une procédure particulière est crawl. C'est incroyablement lent. J'ai modifié mon code pour essayer d'obtenir une meilleure idée de ce qui se passe ....
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)
L'intéressant est que ma sortie finit par ressembler à ceci:
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
Je suis vraiment à court de quoi faire ensuite. Je ne peux pas voir quelque chose d'unique ou de différent sur la ligne qui prend 07: 33.5037500. Aucune suggestion?
EDIT:
Merci pour tout le monde réponses. Premièrement, du mieux que je sache, aucune exception n'est levée. Comme suggéré, j'ai jeté un oeil à cette procédure particulière qui expose le comportement ci-dessus et tandis que la procédure est ridiculement massive; mais il semble qu'il utilise beaucoup de curseurs pour remplir une table temporaire Oracle. Le curseur de référence renvoyé est un SELECT * FROM de cette table temporaire.
Je suis en train d'écrire un bloc PL/SQL qui va ouvrir ce curseur pour voir si le problème de performance existe lorsque je supprime le code .Net ... j'espère que cela aidera; mais si vous avez d'autres idées, ce sera très apprécié.
Merci encore une fois. Cela semble être un problème PL/SQL et pas un problème .NET.
pas assez d'informations pour répondre à l'atm ... sauf si elle lance des exceptions qui sont traitées silencieusement? –
vous devriez probablement poster plus de votre code complet ... –