|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
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 :
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 ? |
||
|
00
|
|
|
#2 |
|
Membre Expert
![]() Consultant informatique Inscription : février 2006 Messages : 727 ![]() |
Bonjour,
As-tu chronométré les différents bouts de code. Là, tu nous fournis un bout de code standard (je ne me permettrais pas de juger la requête SQL qui ne me semble pas très optimisée, mais je ne connais pas la base de données). En plus tu récupère tes données mais tu n'en fait rien (sauf si tu as supprimé ce bout de code aussi). Bref, on ne peut pas vraiment t'aider avec ce peu de données.
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain) N'oubliez pas de avant de ![]() Pas de question techniques par MP, c'est contre la philosophie du forum
|
|
|
00
|
|
|
#3 | ||||||
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
Bonjour et merci pour la réponse rapide.
Effectivement la requête n'est pas vraiment optimisée mais n'est pas de moi et au niveau DB c'est assez conséquent (plus de 1200 tables avec des millions d'enregistrements). Effectivement j'ai retiré une partie du code par soucis de confidentialité. En fait le champ qu'on récupère dans le CLOB est un XML qui est parser par après. J'ai effectivement chronométré les différentes parties du code pour me rendre compte que c'était au niveau du Code :
J'ai supposé que le problème provenait du fait que je ne passais pas par les objets OracleConnection et CO et j'ai donc effectué un test à la maison (même table mais beaucoup moins d'enregistrements et surtout pas 1500 utilisateurs sur la DB ;-) ). Pour avoir un test concluant je travaille sur la même table (qui contient bcp moins d'enregistrement sur ma DB de test) et au lieu de récupérer 120 enregistrements j'en récupère 1000 en 10 sec avec mon code original. J'ai donc essayé avec les objets de system.data.oracleclient.dll. Voici le code : Code :
Code :
Mais je ne vois pas comment amélioré cela. Une idée ? |
||||||
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : septembre 2007 Messages : 2 135 ![]() |
Hello,
as-tu besoin de convertir en string ? Quel est le type de myLob.Value ? Par ailleurs, je t'invite à éviter de fabriquer des requêtes par concaténation de chaînes; c'est une faille de sécurité énorme (nommée injection sql), la bonne façon de faire est décrite ici.
__________________
ಠ_ಠ |
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
le contenu de la valeur du clob est en fait une arborescence XML qui sera parser par après. Donc je pense que je n'ai pas le choix que de passer par un string.
Par contre merci pour l'info au niveau de la formation des requêtes, ici c'est un programme que je retraduis d'un prog VB6 et dont j'essaie de garder un max de la logique identique même si j'utilise un max les classes. Mais je vais en profiter pour revoir les requêtes même si c'est pas mon problème principal pour l'instant. |
|
00
|
|
|
#6 | |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
Citation:
|
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
J'ai trouvé une solution qui me donne un temps d’exécution proche du VB6, c'est d'utiliser les objets Oracle. Mais hélas je ne sais pas utiliser ma librairie qui me permettait d'utiliser les objets génériques et donc d'être compatible avec plusieurs DB. Dans ce cas-ci cette application ne tournera jamais que sur Oracle mais si quelqu'un à une autre solution je suis preneur.
Code :
|
||
|
10
|
|
|
#8 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
Bonjour,
J'ai continuer les tests concernant mon problème. Le temps perdu provient bien du getString sur le clob. J'utilisais la dll trouvée sur le net avec des objets générique (style DBCommand etc.) J'ai testé la même application en utilisant les objets oracle de la dll Oracle.DataAccess.dll obtenue avec le client oracle 11.2.0. La version de la dll est la 4.112.30. Tout ce passe bien tant que j'utilise l'exécutable compilé sur la machine possédant ce client. J'ai un autre poste mais qui possède le client 11.1.0 avec Oracle.DataAccess.dll2.111.6.0 Évidement mon application ne trouve pas la dll avec laquelle il a été compilée Il faut savoir que celle-ci fait partie d'une dll que j'ai créé et que celle ci est recopier dans le répertoire de destination de mon application finale. Ma question est donc comment pouvoir utiliser cette dll obtenue avec le client oracle 11.2.0 sans devoir installer celui-ci sur toute les machines clientes ? Merci d'avance pour votre aide précieuse; |
|
10
|
|
|
#9 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
Bonjour,
Si c'est une dll qui s'installe avec le driver Oracle, je doute que le seul fait de la distribuer avec ton application ne comporte pas de risque. Il faudrait effectué des tests avec différents clients Oracle sur des machines différentes.
__________________
Articles sur les technologies .NET Une réponse vous a aidé ? utiliser le bouton ![]() Votre problème est résolu ? utiliser le bouton
|
|
10
|
|
|
#10 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
A part le problème de savoir si le programme trouvera la dll client à tout les coup, le problème de départ étant résolu je clôture cette discussion
|
|
00
|
Copyright © 2000-2013 - www.developpez.com