Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/06/2007, 14h03   #1
Invité de passage
 
Inscription : juin 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 8
Points : 2
Points : 2
Par défaut Memory Leak connection .net - Firebird1.5

Bonjour à tous,

Ayant quelques soucis de memory leak en C#, j'ai utilisé des profiler de mémoires. Ne comprennant pas tout, il me semble que l'utilisation sans cess croissante de memoire virtuelle de mon programme pourrait venir de l'utilisation des driver odbc pour firebird 1.5...

Est-il possible que la fonction Open soit mal gérée.

Pour voir le début de l'histoire et connaitre tous les détails :
http://www.developpez.net/forums/sho...41#post2194541

faut-il passer a Firebird2 ?

En fait je suis perdue, je n'arrive pas à localiser mon problème.
InfoTdl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 21h42   #2
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Dispose() ne libère pas la mémoire
c'est Collect() qui vide la poubelle
si on ne fait que des Dispose() alors on a des memory leak
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 10h02   #3
Invité de passage
 
Inscription : juin 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 8
Points : 2
Points : 2
Par défaut Open/Close => toujours memory leak

Après avoir essayer Collect (qui n'a rien changé) j'ai reduit mon test à la plus simple expression :
je cree un OdbcConnection sur laquelle je fais Open puis Close et que surlaquelle je fais dispose.

La encore j'ai des fuites de memoire...

pb C# (odbc) ou driver firebird ?

Voici mon code :
public void DirectLoopNoThread()
{
Process aProcess = null;
int i = 0;

while (m_bNotStop)
{
OdbcConnection oConn = new OdbcConnection("DSN=CHGT_SECAB");
oConn.Open();
oConn.Close();
//Free Memory ?
oConn.Dispose();
oConn = null;
System.Threading.Thread.Sleep(1000);
i++;
if (i == 50)
{
i=0;
aProcess = Process.GetCurrentProcess();
Trace.WriteLine(DateTime.Now.ToString() + " TestDb :"
+ " VMem=" + aProcess.VirtualMemorySize
+ " PrivateMem=" + aProcess.PrivateMemorySize);
aProcess.Dispose();
aProcess = null;
GC.Collect();//2) ;
aProcess = Process.GetCurrentProcess();
Trace.WriteLine(DateTime.Now.ToString() + " TestDb : GC.Collect");
Trace.WriteLine(DateTime.Now.ToString() + " TestDb :"
+ " VMem=" + aProcess.VirtualMemorySize
+ " PrivateMem=" + aProcess.PrivateMemorySize);
aProcess.Dispose();
aProcess = null;
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1) ;
aProcess = Process.GetCurrentProcess();
Trace.WriteLine(DateTime.Now.ToString() + " TestDb : GC.SetProcessWorkingSetSize");
Trace.WriteLine(DateTime.Now.ToString() + " TestDb :"
+ " VMem=" + aProcess.VirtualMemorySize
+ " PrivateMem=" + aProcess.PrivateMemorySize);
aProcess.Dispose();
aProcess = null;
}
}
}

Voici les traces obtenues :
====================
18/06/2007 09:48:50 TestDb : DirectLoopNoThread
18/06/2007 09:49:41 TestDb : VMem=179871744 PrivateMem=12541952
18/06/2007 09:49:43 TestDb : GC.Collect
18/06/2007 09:49:43 TestDb : VMem=179871744 PrivateMem=12673024
18/06/2007 09:49:43 TestDb : GC.SetProcessWorkingSetSize
18/06/2007 09:49:43 TestDb : VMem=179871744 PrivateMem=12673024

18/06/2007 09:51:26 TestDb : VMem=288923648 PrivateMem=15372288
18/06/2007 09:51:26 TestDb : GC.Collect
18/06/2007 09:51:26 TestDb : VMem=288923648 PrivateMem=15372288
18/06/2007 09:51:26 TestDb : GC.SetProcessWorkingSetSize
18/06/2007 09:51:26 TestDb : VMem=288923648 PrivateMem=15372288
InfoTdl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 10h57   #4
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
mais quelle idée d'utiliser ODBC alors que le pilote dotnet existe
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 11h40   #5
Invité de passage
 
Inscription : juin 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 8
Points : 2
Points : 2
Par défaut " dll ou pilote firebird .net

Parce que nous n'étions pas sûrs il y a 1 an de travailler avec Firebird

Nous voulions pouvoir changer de base de données sans avoir à tout modifier dans le code.

Aujourd'hui, nous sommes convaincus par Firebird, il serait possible d'utiliser directement votre pilote.

Si ca resoud mes problèmes. je fonce.
InfoTdl est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h05.


 
 
 
 
Partenaires

Hébergement Web