IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

optimisation des performances de connexion oracle / bibliothèque OCI pour C#


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 33
    Points
    33
    Par défaut optimisation des performances de connexion oracle / bibliothèque OCI pour C#
    Bonjour,

    Je travaille actuellement sur la réalisation d'un programme de débuggage syslog.
    Son utilité première est de dépiler les messages envoyés par une application WMS (Warehouse management system).

    Du fait du nombre élevés de messages à traiter, la performance est un élément clé. La gestion de la connexion à la base de données oracle par les différents types de connexion (oledb, odbc) donnent des résultats similaires et restent trop lent.

    J'ai eu connaissance de la bibliothèque oci/ocilib qui fournit un accès bas niveau pour la connexion à la base de données.

    Connaissez-vous son fonctionnement et son implémentation, ou un moyen d'optimiser la connexion à la base de données, et est-il adapté à un développement en C#?

    Informations annexes: développement de type Windows form application avec visual studio 2005 en c# sous windows Xp.

    Merci.
    Yves.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Il n'y a pas, à ma connaissance, de librairie OCI pour .NET. Par contre, plutôt que d'utiliser ODBC ou OleDB qui sont des surcouches pas forcément très optimisées, tu devrais utiliser le provider Oracle officiel pour .NET (ODP.NET, dispo sur le site d'Oracle).

    D'autre part, tu peux peut-être optimiser la façon dont tu gères les connexions. Tu utilises le pooling ? tu crées une nouvelle connexion à chaque fois ou tu réutilises toujours la même ? Tu penses bien à refermer tes connexions quand tu ne t'en sers plus ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Merci de ton aide.

    En utilisant odp.net, l'erreur suivante apparaît:
    (Oracle.DataAccess a été, semble-t-il, ajouté correctement et apparaît dans les références)
    Unable to load DLL 'OraOps9.dll': Le module spécifié est introuvable
    En ce qui concerne la connexion, je n'en utilise qu'une seule que je ferme en fin de traitement.

    Au sujet du pooling, je ne l'utilise pas, je ne connaît pas son fonctionnement mais je vais faire de recherche pour l'appliquer.

    Le code central de l'application, contenu dans une boucle est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE status NUMBER; message VARCHAR2(800); pipe_name VARCHAR2(900) := '" + pile + "'; BEGIN status := DBMS_PIPE.receive_message(pipename => pipe_name, timeout  => 1); IF status = 0 THEN DBMS_PIPE.unpack_message(message); :sid := message; DBMS_PIPE.unpack_message(message); :date := message; DBMS_PIPE.unpack_message(message); :package := message; DBMS_PIPE.unpack_message(message); :message := message; END IF; END;
    Les paramètres de sortie sont ensuite traités en c# et insérés dans un datagridview.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par yves042 Voir le message
    En utilisant odp.net, l'erreur suivante apparaît:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Unable to load DLL 'OraOps9.dll': Le module spécifié est introuvable
    Ton client Oracle est probablement mal installé... vérifie que le répertoire qui contient cette DLL (a priori %ORACLE_HOME%\bin ou qqch comme ça) est bien dans le PATH.

    Citation Envoyé par yves042 Voir le message
    En ce qui concerne la connexion, je n'en utilise qu'une seul que je ferme en fin de traitement.

    Au sujet du pooling, je ne l'utilise pas, je ne connaît pas son fonctionnement mais je vais faire de recherche pour l'appliquer.
    Si tu n'utilises qu'une connexion, le pooling ne changera rien au problème a priori.

    Tu es sûr que la lenteur est due au code C#, et pas à l'exécution du bloc PL/SQL ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ton client Oracle est probablement mal installé... vérifie que le répertoire qui contient cette DLL (a priori %ORACLE_HOME%\bin ou qqch comme ça) est bien dans le PATH.
    Ce problème résolu, une autre erreur a lieu:
    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

    Tu es sûr que la lenteur est due au code C#, et pas à l'exécution du bloc PL/SQL ?
    L'utilisation de la bibliothèque OCI en C++ donne des résultats satisfaisants mais son fonctionnement subsiste obscure à mes yeux.
    Cependant, le code contenu dans le bloc pl/sql semble similaire.

  6. #6
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
    Assure-toi que l'identité du processus de ton application possède toutes les autorisations requises pour lire/parcourir/etc sur le répertoire Oracle.

    J'ai aussi déjà cette erreur, réglée après avoir passé 'Impersonation' à false dans ma connectionstring. Mais apparemment ça peut avoir plusieurs causes.

    Sinon pour les perfs, dans beaucoup de cas que j'ai vécus les problèmes venaient d'Oracle et pas de l'application ; Oracle recquiert souvent un paramétrage assez fin du serveur et des bases pour être optimisé.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Je testerais ça demain matin au boulot. Je ne connaissais pas la propriété Impersonation de la connectstring.

    Merci de votre aide.

Discussions similaires

  1. Réponses: 13
    Dernier message: 18/07/2011, 17h24
  2. Optimisation des performances : affichage d'un dessin
    Par smyley dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 11/02/2009, 02h41
  3. [MySQL] Optimisation des performances ?
    Par Sayrus dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/08/2007, 12h57
  4. Optimisation des performances sur station SUN
    Par TiChabin972 dans le forum Général Java
    Réponses: 1
    Dernier message: 20/07/2007, 17h26
  5. Optimisation des performances
    Par GLSpirit dans le forum C++
    Réponses: 14
    Dernier message: 12/05/2007, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo