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

Oracle Discussion :

[Ocilib] Explication Fuite de handle


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Par défaut [Ocilib] Explication Fuite de handle
    Bonjour,

    Je développe un programme en c++ avec VS 2005. J'utilise Ocilib pour la connexion à oracle.
    J'ai une montée des handles sur le serveur sur lequel tourne la base de données oracle. Le code suivant semble en être la cause sachant qu'il s'agit du code inclut dans le timer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    std::string sid;
    std::string date;
    std::string package;
    std::string message;
     
    int num_lig = 0;
     
    if (cn != NULL)
    {
    	st = OCI_StatementCreate(cn);
     
    	std::string str = string("declare fin number(1); begin :fin := dbms_pipe.receive_message('") + pile + ("', 0); exception when others then null; end;");
     
    	OCI_Prepare(st, const_cast<char*>(str.c_str()));
    	OCI_BindInt(st, ":fin", &fin);
    	OCI_Execute(st);
    }				
    OCI_StatementFree(st);
    le problème vient-il de l'utilisation d'OCI_StatementCreate dans un timer?

    Merci.

    Yves.

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    salut,

    il y a un probleme de portée... La variable locale 'st' n'est jamais libérée
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Par défaut
    Salut,

    Merci de ta réponse.
    Si c'est à ça que tu fais allusion, j'ai fais une petite erreur en supprimant le code intermédiaire, le OCI_StatementFree est à l'intérieur de la boucle if.

    Actuellement, j'ai défini *st dans un .h externe que j'inclue dans la form où j'exécute le timer. Le définir dans mon timer résoudrait le problème.

    Merci pour ta disponibilité.

    Yves.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Par défaut
    Le définir dans mon timer résoudrait le problème?
    dsl, ce n'était pas une affirmation mais une interrogation.

  5. #5
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Si tu as des curseurs qui augmente dans la base, c'est que objets OCI_Statement ne sont pas libérés.

    Il faut donc faire une revue de code et vérifier que chaque statement est bien libéré.

    De plus, faire attention à la portée des variables et à leur classe d'allocation (statique ou externe) et par exemple ne pas avoir de variable 'st' globales et locales.

    Donc il vaut mieux déclarer tes statements en local
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. [OCILIB] [OCI] Fuite mémoire obscure
    Par zifox dans le forum Interfaces de programmation
    Réponses: 19
    Dernier message: 02/08/2010, 17h06
  2. [OCILIB][OCI] Fuite mémoire
    Par yves042 dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 04/06/2010, 16h51
  3. Fuite de handles - CDatabase
    Par Patriator dans le forum MFC
    Réponses: 3
    Dernier message: 28/04/2009, 14h50
  4. [explication]Fuite mémoire new()
    Par Astraya dans le forum C++
    Réponses: 24
    Dernier message: 05/03/2009, 19h03
  5. [C# MultiThreading]"Fuites" de Handle ou de Thread
    Par djseb dans le forum Framework .NET
    Réponses: 2
    Dernier message: 14/05/2008, 10h09

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