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

XMLRAD Discussion :

XMLCursor et la mémoire


Sujet :

XMLRAD

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Architecture - Sécurité
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecture - Sécurité

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Par défaut XMLCursor et la mémoire
    Bonjour,

    Nous avons une application conçu sur la base de XMLRAD. Nous constatons une consommation de mémoire récurrente qui nous oblige à relancer l'application toutes les deux heures.

    Après investigation et revue de code, nous nous sommes aperçus que la consommation de mémoire aller de paire avec le nombre de XMLCursor et la taille du « Limbo » qui grandi. En allant plus loin, nous avons identifié que ce sont principalement des XMLCursor de type « OutputDoc » créés par la fonction TXMLService.CreateDocument qui sont conservés (en dizaine de milliers), voir la trace ci-après.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    01/09/2009 09:39:29 [$11475F20]<289882160>(0000000009) - Age(140,2070325279) - OutputDoc 0 : [$02780AD8] ..\..\..\XMLCLX\Source\XMLService.pas XMLService.CreateOutput(939) 1 : [$02781813] ..\..\..\XMLCLX\Source\XMLService.pas XMLService.TXMLService.CreateDocument(1092) 2 : [$02782126] ..\..\..\XMLCLX\Source\XMLService.pas XMLService.TXMLService.CreateContent(1275) 3 : [$02784C22] ..\..\..\XMLCLX\Source\XMLService.pas XMLService.TXMLService.Execute(1887) 4 : [$027776E1] ..\..\..\XMLCLX\Source\XMLComponent.pas XMLComponent.TCustomXMLComponent.Execute(555) 5 : [$0274A018] ..\..\..\XMLCLX\Source\XMLApp.pas XMLApp.ExecuteActionComponent(1475) 6 : [$0276B490] ..\..\..\XMLCLX\Source\XMLApp.pas XMLApp.TXMLApplication.XMLCollectionDispatchRequest(9125) 7 : [$02755BAC] ..\..\..\XMLCLX\Source\XMLApp.pas XMLApp.TXMLApplication.GetAvailableXMLCollectionAndDispatchRequest(4416) 8 : [$0275A3D2] ..\..\..\XMLCLX\Source\XMLApp.pas XMLApp.InternalGlobalDispatchRequest(5353) 9 : [$0275AA8D] ..\..\..\XMLCLX\Source\XMLApp.pas XMLApp.TXMLApplication.InternalDispatchRequest(5416) 10 : [$02747DF7] ..\..\..\XMLCLX\Source\XMLApp.pas XMLApp.TXMLDispatchThread.Execute(873) 11 : [$025CBB0F] common\Classes.pas Classes.ThreadProc(9877) 12 : [$025A5512] C:\builds\Tp\rtl\sys\system.pas System.ThreadWrapper(12108)
    Une personne sait-elle dans quelle structure sont conservés ces XMLCursor ?
    Nous voudrions pouvoir les libérer pour nous éviter de devoir relancer notre application et voir aussi nos performances décroitre.

    Cordialement.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 30
    Par défaut Peut etre un abus de XML_Cache
    OutputDoc s'élimine tout seul à la fin de la requête... A moins que vous ayez encapsulé des sections dans des XML_Cache ?
    Pour répondre il faudrait avoir le xmlService

  3. #3
    Membre actif
    Homme Profil pro
    Architecture - Sécurité
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecture - Sécurité

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Par défaut
    Merci de votre réponse, mais depuis ce matin, nous avons trouvé d'où venait le souci. C'est une anomalie XMLRAD qui existe depuis longtemps.

    Le problème se situe dans la mathode TXMLGram.Process(const AInputDoc, AOutputDoc: IXMLCursor);. La correction consiste à effacer les deux XMLCursor InputDoc et OutputDoc suite à la ligne 3973. Notre outil de trace nous montre que la rétention des XMLCursor de type « OutputDoc » n'existe plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            finally
              CommitTransactions(XMLRequest);
    	  InputDoc := nil;
    	  OutPutDoc := nil;
            end;
    Cordialement.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 30
    Par défaut Version d'XMLRAD
    S'il vous plait : quelle version XMLRAD utilisez-vous ?
    Je ne trouve pas les lignes citées dans mon source ...

    Georges

  5. #5
    Membre actif
    Homme Profil pro
    Architecture - Sécurité
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecture - Sécurité

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Par défaut
    Attention dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            finally
              CommitTransactions(XMLRequest);
    	  InputDoc := nil;
    	  OutPutDoc := nil;
            end;
    Les lignes concernant InputDoc et OutputDoc sont rajoutées. Donc pour vous, ce qui est important c'est de prendre en compte la méthode TXMLGram.Process(const AInputDoc, AOutputDoc: IXMLCursor); de l'unité XMLGram.pas, puis le numéro de ligne 3973 qui doit désigner le CommitTransactions dans un finally ou rechercher cette séquence dans cette méthode. La version que nous utilisons est une 2007.

  6. #6
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    Bonjour,
    Tu pointes sur quelque chose d'interessant effectivement, mais je pense qu'il y a autre chose derriere.... ces curseurs devraient être "libéré" lors de la destruction du TXMLGRAM. Je n'ai pas creusé mais tu as l'air de dire que ce n'est pas le cas, mais c'est possible. Peut etre alors faudrait-il se pencher aussi sur ce problème... Ou alors tu garderais qqs part dans tes traitements une référence à un objet xmlgram qui ne serait jamais libérée ?

    Ceci dit, ta modif parait cohérente vu que InputDoc et OutputDoc sont initialisés plus haut (on peut supposer qu'on en a plus besoin apres).

    Michael

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  2. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 12h37
  3. Déterminer l'adresse d'une application en mémoire
    Par Gib dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 11/06/2002, 14h27
  4. Vitesse de la mémoire vidéo
    Par Anonymous dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 06/06/2002, 20h20
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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