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 :
Mon environnement: Visual2008 , idem avec Visual2003.NET
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; }
Merci d'avance à vous
Partager