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

MFC Discussion :

Fuite de handles - CDatabase


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut Fuite de handles - CDatabase
    Bonjour,

    J'ai un problème qui me taraude ces derniers temps :

    Une bête aplication MFC avec des threads de travail.

    Lors de la réception d'évenements données, j'ouvre un thread chargé de faire entre autre un enregistrement dans une BDD.

    Maintenant mon appli est correcte , ne gonfle pas en mémoire mais le nombre de handle va croissant. Ce qui amene mon appli à planter au bout de quelques milliers d'enregistrements.

    Il semble que ce soit indépendant du multi htreading - mais dans une appli monothreadée, on ne crée pas un objet d'accès à la base à chaque fois.

    Où j'en suis de mes constataions :

    Création de mon objet CDatabase
    Anything
    Ouverture de ma Database
    Anything
    Fermeture
    Suppression de mon objet

    -> nombre de handles de mon appli : +2 Sémaphores

    Même chose avec un echec à l'ouverture -> +0

    Même chose avec OpenEx à la place de Open -> +2

    Si on fait x ouvertures/fermetures -> +2

    Un bout de code :
    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
    19
    20
    21
    22
    23
    24
    25
    26
     
    nt cnt=0;
    for (;cnt <=5;cnt++)
    {
    cout << " Before creating object" <<endl;
     
    CDatabase *pdb;
    cout << " Before allocating memory" <<endl;
    pdb = new CDatabase;
    cout << " after allocating memory" <<endl;
    int a;
    cout << " Before open ex" <<endl;
    cin >> a;
    pdb->OpenEx(_T("DSN=test;UID=dbo"));
    cout << " after open ex" <<endl;
     
    pdb->Close();
    int b;
    cout << " Before close" <<endl;
    cin >> b;
     
    delete pdb;
     
    cout << " final "<<endl;
    cin >> b;
    }
    Mon environnement: Visual2008 , idem avec Visual2003.NET

    Merci d'avance à vous

  2. #2
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    A vu de nez je dirai que tes connections ne se ferment pas, mais ça reste à vérifier.

    Le plus simple étant que tu vérifies les retours de chaque fonction de base que tu utilises sur la BDD.

  3. #3
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Un objet database par thread devrait faire l'affaire.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut
    Au final / en attendant mieux j'ai déterminé avoir besoin de X threads maxi
    Je crée autant d'objets database que le nombre de threads simultanés maxi
    et les réutilise.
    Mon appli en fonctionnement aura 2x handles en plus mais le nombre n'augmente pas.

Discussions similaires

  1. [Ocilib] Explication Fuite de handle
    Par yves042 dans le forum Oracle
    Réponses: 4
    Dernier message: 25/08/2010, 14h34
  2. [C# MultiThreading]"Fuites" de Handle ou de Thread
    Par djseb dans le forum Framework .NET
    Réponses: 2
    Dernier message: 14/05/2008, 10h09
  3. Réponses: 8
    Dernier message: 17/10/2002, 12h52
  4. pb de récup de handle à partir d'une dll
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 12h29
  5. pb de handle en C
    Par deedje dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 16h19

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