FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ATENTOS. TXMLDocument no libera memoria
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: Fri Jan 30, 2015 05: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'
Posts: 990
Joined: Thu Nov 17, 2005 05:49 PM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: Fri Jan 30, 2015 05: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?

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: Fri Jan 30, 2015 09: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 (fw): Select all Collapse
    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 (fw): Select all Collapse
    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 :-)
______________________________________________________________________________

Sevilla - Andalucía
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: 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 (fw): Select all Collapse
    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 :-)


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__)
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: 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__)
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: 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
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: 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

Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: Fri Mar 13, 2015 04: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__)
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: Fri Mar 13, 2015 08: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
Posts: 990
Joined: Thu Nov 17, 2005 05:49 PM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: Fri Mar 13, 2015 08: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.

Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: 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.
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Re: ATENTOS. TXMLDocument no libera memoria
Posted: Mon Mar 16, 2015 08: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__)

Continue the discussion