begin process at 2010 02 10 12:46:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Base de données

 > 

Oracle

 > 

Lecture Oracle -> Augemantation mémoire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lecture Oracle -> Augemantation mémoire

mercredi 8 août 2007 à 09:27:34 | Lecture Oracle -> Augemantation mémoire

nicompx

Bonjour,

Je developpe une application C# avec VS2003 Framework1.1.
Cette application lit en boucle dans une base de données Oracle (client9.2).
Je me suis rendu compte que la mémoire augmentait sans arrêt. (+- 150ko / seconde)
Je suppose que j'oublie de libérer quelque chose!?
Pouvez-vous m'aider?

Merci pour votre aide.

>> NiCoMpX <<


Voici le code de l'application:

/********************************/
/*                    MAIN                              */
/********************************/
string sQuery;
object[,] resultat;

classOracle monOracle =
new classOracle();

try
{
   sQuery = "select MSG_ID, BODY, PROVID, NUMBER_GSM, SHORTCODE, TIMESTAMP, DATESTART from SMS_MO";
   
if(monOracle.connect())
   {
         
while(true)
         {

            System.Threading.Thread.Sleep(100);
//Pause de 100ms
            
resultat = monOracle.getQueryResult(sQuery);
            resultat =
null;

         }

         monOracle.deconnect();
   }
}
catch
{
}
finally
{
   monOracle.deconnect();
}


/********************************/
/*                    classOracle                      */
/********************************/

/*  Fonction de connexion  */
publicbool connect()
{
   try
   {
      
this.sUser = "******";
      this.sPassword = "******";
      this.sServeur = "INFOTEC";

      this.oracleCnx.ConnectionString = "Password=" + this.sPassword + ";User ID=" + this.sUser + ";Data Source=" + sServeur;

      this.iNbCols = 0;
      this.iNbRows = 0;

      oracleCnx.Open();

      returntrue;
   }
   
catch(Exception)
   {
      Console.WriteLine("Impossible de se connecter à la base de données");
      
returnfalse;
   }
}
/*  Fonction de lecture  */
public Object[,] getQueryResult(string sQuery)
{

   
this.oracleCmd = new OracleCommand(sQuery, this.oracleCnx);
   
this.oracleReader = null;
   
this.oracleReader = this.oracleCmd.ExecuteReader();

   Object[,] oArrResult;

   this.iNbRows = 0;
   
this.iNbCols = this.oracleReader.FieldCount;

   // Initialisation du tableau de retour
   
while (this.oracleReader.Read()) { this.iNbRows++; }
   oArrResult =
new Object[this.iNbRows,iNbCols];
   
   
// Remplissage du tableau de retour
   
try
   
{
         
this.oracleReader = this.oracleCmd.ExecuteReader();
         
int i = 0;
         
while (this.oracleReader.Read())
         {
               
for(int j=0; j<this.iNbCols; j++)
               {   
                     oArrResult[i,j] = oracleReader.GetOracleValue(j);
               }
               i++;
         }
   }
   
catch(OracleException oe)
   {
         
this.gestionErreur(oe);
         
returnnull;
   }
   
finally
   
{
         
this.oracleReader.Close();
         
this.oracleCmd = null;  
         
this.oracleReader = null;
   }

   
return oArrResult;
}
mercredi 8 août 2007 à 09:42:18 | Re : Lecture Oracle -> Augemantation mémoire

leprov

Il me semble qu'il n'y a rien d'anormal dans ton code. Cependant, les instructions
this.oracleCmd = null;  
this.oracleReader = null;
ne libèrent pas la mémoire, elles rendent simplement les objets éligibles pour la garbage collection....
En bref, il est possible que ton occupation mémoire augmente le temps que le garbage collector fasse son office, puis rechute après. En bref, tu dois vérifier ton occupation mémoire sur du long terme pour voir si tu as effectivement un problème, pas jsute sur quelques secondes (peut etre que cest ce que tu as fait? dans ce cas ca me semble étonnant)
mercredi 8 août 2007 à 09:42:59 | Re : Lecture Oracle -> Augemantation mémoire

leprov

(la mise en forme bug un peu.....vivement une option d'édition)
mercredi 8 août 2007 à 09:52:26 | Re : Lecture Oracle -> Augemantation mémoire

sebmafate

Membre Club Administrateur CodeS-SourceS
il faut faire un Dispose() sur l'object OracleConnection et OracleCommand


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
mercredi 8 août 2007 à 10:50:06 | Re : Lecture Oracle -> Augmentation mémoire

nicompx

J'ai ajouté un Dispose() sur l'objet OracleCommand mais j'ai toujours le même problème.
La mémoire augmente sans arrêt. ( 1Mo / minute )

>> NiCoMpX <<
mercredi 8 août 2007 à 10:58:48 | Re : Lecture Oracle -> Augemantation mémoire

sebmafate

Membre Club Administrateur CodeS-SourceS

hum... pourquoi retourner un object[,] dans ta fonction de lecture ? pourquoi pas tout simple un arraylist ?
ca t'éviterait de lancer 2 fois ta requête... non ?

 

pas non plus la peine de mettre 2 fois la méthode de déconnection... c'est suffisant dans le finally !


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]

mercredi 8 août 2007 à 11:19:03 | Re : Lecture Oracle -> Augemantation mémoire

nicompx

Re,

Je viens de faire les adaptations que tu vous m'avez suggéré et j'ai toujours le problème.
Je pense que ca viens de l'objet oracleReader mais pourtant il est bien fermé dans le finally!?
Avez-vous d'autres idées????

D'avance merci.

>> NiCoMpX <<
mercredi 8 août 2007 à 11:34:35 | Re : Lecture Oracle -> Augemantation mémoire

sebmafate

Membre Club Administrateur CodeS-SourceS
il faut aussi faire le Dispose sur l'objet oracleReader


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
mercredi 8 août 2007 à 12:26:35 | Re : Lecture Oracle -> Augemantation mémoire

rodcobalt22

A mon avis cela pourrais être une raison d'utiliser les using sur les oraccle connection, oracle reader, ... Le using permet de notifer la destruction des objets lorsqu'il ne sont plus utilisé, cad en fin d'accolade de ton using va voir la msdn pour ça : http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/csspec/html/vclrfcsharpspec_8_13.asp juste au hasard voir si la gestion mémoire ne serait pas plus optimum avec cette méthode
mercredi 8 août 2007 à 14:16:29 | Re : Lecture Oracle -> Augemantation mémoire

sebmafate

Membre Club Administrateur CodeS-SourceS
le using permet d'appeler le Dispose() à la sortie du bloc... rien de plus !

mais c'est un bon exemple pour l'appliquer.


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]


Cette discussion est classée dans : object, squery, oraclereader, monoracle, inbcols


Répondre à ce message

Sujets en rapport avec ce message

Implementer une interface COM existante dans un object .NET [ par FrancoisC ] Bonjour,J'essaye d'implémenter une interface COM existantedans un object .NET (UserControl).Mais c'est interface n'est pas accessible par l'objet COM pb de variable non definie [ par kaiwoo ] [STAThread] static void Main() { Application.Run(new Form1()); } private void textBox1_TextChanged(object sender, System.EventArgs e) { } pr Probleme d'acces à une base Access [ par ja001net ] Bonjour,Je fais un programme en C#.net utilisant une basse access, avec laquelle j'accède via un OleDbConnection un OleDbDataReader et un OleDbCommand Attachements outlook [ par Gabberzorus ] Salut,Je voudrais utiliser cette méthode pour envoyer des mails avec attachements : Outlook.Attachments.Add(object Source, object Type, object Positio HELP CONVERT OBJECT [ par sg_kan ] Salut est ce que quelqu'un pourrez m'aidez et me dire commment fair eun cast en c# de object en DropDownList ou en CheckBox ou en TextBox..En VB ca d instanciation IWebBrowser2 [ par netTPH ] Salut !je n'arrive pas à créer un objet IWebBrowser2...je viens à peine de me mettre en c# donc, j'ai surement écrit une bêtise quelconque Voilà le co déclaration de variable [ par perce ] je ne comprend pas trop ce qui se passec'est du code asp.net C#--------------------------------------------------------------private int var1;void pag Problème de destruction d'objet (System.ObjectDisposedException : Cannot access a disposed object) [ par olivet ] Bonjour, J'ai un petit problème dans mon application... pourquoi ca marche pas???En fait c une appli winform qui démarre avec une form de connexion qu List d'object [ par fdouieb ] Bonjour est ce qu'il existe une structure ou autre chose qui nous permet de connaitre l'ensemble des éléments sur une fenetre "Form".Exemple: de façon Object must implement IConvertible [ par MAQFAB ] Bonjour,J'ai besoin d'aide pour un petit projet C# --> Oracle 9.Je dois exécuter une SP sur un serveur Oracle. La SP comporte 4 paramètres d'entrée, e


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales