ATENTOS. TXMLDocument no libera memoria

Re: ATENTOS. TXMLDocument no libera memoria

Postby hmpaquito » Fri Jan 30, 2015 5:16 pm

pero NO me parece normal que tengamos que FORZAR nosotros a entrar el recolector de basura.



Hasta donde yo se el recolector de basura trabaja automaticamente en los tiempos idle. Si en un proceso intensivo no hay tiempos idle... el recolector no es llamado... por tanto hay que invocarlo 'manualmente'
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: ATENTOS. TXMLDocument no libera memoria

Postby reinaldocrespo » Fri Jan 30, 2015 5:20 pm

Rafa;

Pues me parece fantástico. Luce muchas más fácil de usar que TxmlDocument(). No creo que cambie todo el código que tengo ya funcionando perfectamente, pero en una futura necesidad me gustaría poder dirigirme a un xml document usando un hash como veo en tu código. Lo que no mencionas es de donde sale esta librería mxml. O sea, ¿y como la consigo?
User avatar
reinaldocrespo
 
Posts: 979
Joined: Thu Nov 17, 2005 5:49 pm
Location: Fort Lauderdale, FL

Re: ATENTOS. TXMLDocument no libera memoria

Postby xmanuel » Fri Jan 30, 2015 9:44 pm

Hola Rafa, soy Manu de Sevilla...
Admitiendo que no estoy metido en estos líos tuyos por lo que no sé si lo que voy a decir tiene sentido para ti.
Este método WriteXML está bien?

Code: Select all  Expand view  RUN

    METHOD WriteXML() CLASS Twebtarifas
       Local oNode, oNodeP, oNodeConcepto, aTarifa

       oNode := ::CreateXML()

       oNodeP := TxmlNode():New( HBXML_TYPE_TAG, ::Operacion  )
                 oNodeP:SetAttribute( "CODIGOHOT", ::CodigoHot )
                 oNodeP:SetAttribute( "IDUSER",    ::IdUser )

       oNode:AddBelow( oNodeP )

       if !empty( ::aTarifas )
          for each aTarifa in ::aTarifas
              oNodeConcepto := TxmlNode():New( HBXML_TYPE_TAG, "CONCEPTO" )
                 oNodeConcepto:SetAttribute( "PAX",      UHtmlEncode( aTarifa[1] ) )
              oNodeP:AddBelow( oNodeConcepto )
          next
       endif

    RETURN ::oDoc:ToString()
 


Prueba así:
Code: Select all  Expand view  RUN

    METHOD WriteXML() CLASS Twebtarifas
       Local oNode, oNodeP, oNodeConcepto, aTarifa

       oNode := ::CreateXML()

       oNodeP := TxmlNode():New( HBXML_TYPE_TAG, ::Operacion  )
                 oNodeP:SetAttribute( "CODIGOHOT", ::CodigoHot )
                 oNodeP:SetAttribute( "IDUSER",    ::IdUser )

       oNode:AddBelow( oNodeP )

       if !empty( ::aTarifas )
             oNodeConcepto := TxmlNode():New( HBXML_TYPE_TAG, "CONCEPTO" ) // Lo quito de debajo y lo pongo aquí
          for each aTarifa in ::aTarifas
              //oNodeConcepto := TxmlNode():New( HBXML_TYPE_TAG, "CONCEPTO" )  // Fuera de aqui esto
                 oNodeConcepto:SetAttribute( "PAX",      UHtmlEncode( aTarifa[1] ) )
              oNodeP:AddBelow( oNodeConcepto )
          next
       endif

    RETURN ::oDoc:ToString()
 


No sé si coges la idea :D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: ATENTOS. TXMLDocument no libera memoria

Postby thefull » Fri Jan 30, 2015 10:18 pm

xmanuel wrote:Hola Rafa, soy Manu de Sevilla...
Admitiendo que no estoy metido en estos líos tuyos por lo que no sé si lo que voy a decir tiene sentido para ti.
Este método WriteXML está bien?

Prueba así:
Code: Select all  Expand view  RUN

    METHOD WriteXML() CLASS Twebtarifas
       Local oNode, oNodeP, oNodeConcepto, aTarifa

       oNode := ::CreateXML()

       oNodeP := TxmlNode():New( HBXML_TYPE_TAG, ::Operacion  )
                 oNodeP:SetAttribute( "CODIGOHOT", ::CodigoHot )
                 oNodeP:SetAttribute( "IDUSER",    ::IdUser )

       oNode:AddBelow( oNodeP )

       if !empty( ::aTarifas )
             oNodeConcepto := TxmlNode():New( HBXML_TYPE_TAG, "CONCEPTO" ) // Lo quito de debajo y lo pongo aquí
          for each aTarifa in ::aTarifas
              //oNodeConcepto := TxmlNode():New( HBXML_TYPE_TAG, "CONCEPTO" )  // Fuera de aqui esto
                 oNodeConcepto:SetAttribute( "PAX",      UHtmlEncode( aTarifa[1] ) )
              oNodeP:AddBelow( oNodeConcepto )
          next
       endif

    RETURN ::oDoc:ToString()
 


No sé si coges la idea :D


Umm. creo que sobra el de arriba, no el de abajo, pero que se reescribe en el bucle.
<CONCEPTO PAX="1">
De lo contrario, estaría cambiando continuamente simplemente el valor del atributo, y no creando nodos, que es lo que me interesa.

Muchas gracias de todas formas

Saludos
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: ATENTOS. TXMLDocument no libera memoria

Postby thefull » Fri Jan 30, 2015 10:18 pm

reinaldocrespo wrote:Rafa;

Pues me parece fantástico. Luce muchas más fácil de usar que TxmlDocument(). No creo que cambie todo el código que tengo ya funcionando perfectamente, pero en una futura necesidad me gustaría poder dirigirme a un xml document usando un hash como veo en tu código. Lo que no mencionas es de donde sale esta librería mxml. O sea, ¿y como la consigo?


En harbour esta en /contrib/hbmxml
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: ATENTOS. TXMLDocument no libera memoria

Postby xmanuel » Sat Jan 31, 2015 11:05 am

Eso depende Rafa, habría que ver que hace el método. Por lo que veo tiene la pinta que hace una copia nueva del item que se le pasa al métod...
Tu prueba a ver que pasa... :roll:
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: ATENTOS. TXMLDocument no libera memoria

Postby hmpaquito » Tue Mar 10, 2015 12:54 pm

Rafa,

Reabro el post porque creo que tendrias que poner hb_gcall(.T.)
Importante el .T. para forzar el recolector a ejecutar la accion, sino solo se hara cuando encuentre un idle. Eso podria explicar tus perdidas de memoria.

Explicacion del garbage collector en https://vivaclipper.wordpress.com/2014/ ... collector/


Por cierto, hablando de xml... ¿ alguien recomienda un buen editor/ visualizador de xml, a ser posible free ?

Saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: ATENTOS. TXMLDocument no libera memoria

Postby thefull » Fri Mar 13, 2015 4:46 pm

Da igual. Además que ha veces se produce cuelgues inesperados.
He optado por usar la la mxml y solucionado.

Por cierto, mira esto, ahora con los createobjet() también se consume la memoria que da miedo;
http://xthefull.blogspot.com.es/2015/02 ... moria.html
Lo reporte en los foros de Harbour, nadie dijo nada... En fin... tendrán otras cosas que mirar.

Respecto a la herramienta uso Altova XMLSpy, es de pago, pero es muy muy buena.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: ATENTOS. TXMLDocument no libera memoria

Postby Armando » Fri Mar 13, 2015 8:44 pm

Amigos:

Sin duda XML NotePad, es free.

http://www.microsoft.com/en-us/download ... px?id=7973

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3230
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: ATENTOS. TXMLDocument no libera memoria

Postby reinaldocrespo » Fri Mar 13, 2015 8:47 pm

Gente;

Si de algo les sirve, la clase TXMLDocument() fue arreglada en xharbour ya hace como dos años y desde entonces no padece de pérdida de memoria.


Reinado.
User avatar
reinaldocrespo
 
Posts: 979
Joined: Thu Nov 17, 2005 5:49 pm
Location: Fort Lauderdale, FL

Re: ATENTOS. TXMLDocument no libera memoria

Postby hmpaquito » Sat Mar 14, 2015 10:31 am

thefull wrote:Por cierto, mira esto, ahora con los createobjet() también se consume la memoria que da miedo;
http://xthefull.blogspot.com.es/2015/02 ... moria.html


De vez en cuando me paso por tu foro y fue por ese post tuyo por el que postee yo.
Vamos a ver. Yo no tengo claro que Createobject() tenga fugas de memoria, quizá los altos niveles de ocupacion de memoria se deba a que no se "deja" que harbour recupere los bloques no usados porque no hay tiempos idle.

Te pongo un ejemplo. En las funciones que uso de generacion de Excel con CreateObject() me producian un fantastico irrecuperable error 9002 hasta que un dia le puse hb_gcall(.t.) y voilá, adios a los 9002.

Entonces... ¿ de quien es el problema ? ¿ Del excel, del harbour o del createobject() ? Pues de ninguno, si acaso, nuestra por no poner un estrategico hb_call(.t.) donde sea necesario.

Por cierto, mi post venia porque en tu articulo utilizas hb_gcall(.f.) y a mi modo de ver ha de ser hb_gcall(.t.) y por ello ponia la direccion de donde hay una explicacion a todo esto del garbage collector.

cordiales saludos.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: ATENTOS. TXMLDocument no libera memoria

Postby thefull » Mon Mar 16, 2015 8:18 am

Buenas
>>Por cierto, mi post venia porque en tu articulo utilizas hb_gcall(.f.) y a mi modo de ver ha de ser hb_gcall(.t.) y por ello ponia la direccion de donde hay una explicacion a todo esto del garbage collector

Es igual , lo pongas a .T. o lo pongas a .F., es que en el primer post, si lo pongo a .T. , no sé si tu aplicación usan threads, literalmente, a veces, casca.
Si coges el ejemplo, y lo haces andar, verás como no se libera la memoria. De lo contrario, deberá ser entonces mi compilador de C, en este caso uso Borland.
Cuando expongo algo, primero he realizado MULTIPLES pruebas, y dejo el ejemplo que demuestra, al menos desde mi parte, lo que está ocurriendo.

La solución que comentas , no funciona, aparentemente, en este ejemplo en concreto.
Y que la solución sea llamar al recolector de basura directamente, sorry, pero eso solo es un parche, que lo puede solucionar, no te digo que no, pero , bajo mi punto de vista, no es correcto.

Saludos Cordiales
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 39 guests

cron