close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 12 years ago

Last modified 12 years ago

#1701 accepted defect

Explorar conjuntos de nameblocks con TolBase

Reported by: Pedro Gea Owned by: Jorge
Priority: high Milestone: Mantainance
Component: Toltcl Version: 3.1
Severity: major Keywords:
Cc:

Description

Se observan pérdidas de memoria al explorar con TolBase un conjunto de nameblocks. Cada vez que se explora de nuevo aumenta la RAM consumida por el proceso TOL.

Por ejemplo, al explorar el siguiente conjunto:

Set For(1, 10000, NameBlock (Real i) {
  NameBlock  [[
    Real a = 1
  ]]
});

la memoria RAM aumenta decenas de MB tras cada exploración.

Esto parece ocurrir sólo con variables TOL de tipo NameBlock.

Change History (3)

comment:1 Changed 12 years ago by Jorge

Component: InterfaceToltcl
Severity: normalmajor
Status: newaccepted

El problema parece manifestarse también con objetos simples, por ejemplo Real. Quizás es desde el paquete toltcl donde se está perdiendo la memoria.

comment:2 Changed 12 years ago by Jorge

Simulando la iteración básica que hace tolbase vemos que no hay pérdida de memoria. El código que se ha utilizado es el siguiente:

package require -exact Toltcl 3.1
toltcl::initkernel
tol::console eval {
  Set test1701 = Set For(1, 10000, NameBlock (Real i)
                         {
                           NameBlock  [[Real a = 1]]
                         });
}

puts [tol::info var {Set test1701}]

proc DoOneIter { } {
  set n 0
  tol::foreach it {Set test1701} {
    foreach i $it {
      incr n [string length $i]
    }
  }
  puts "DoOneIter: $n"
}

Luego desde una consola tkcon se ha invocado repetidamente a DoOneIter y la memoria no crece.

La memoria puede estar quedándose pillada en un array de tcl que no se está limpiando, o el árbol del inspector no está liberando bien la memoria.

comment:3 Changed 12 years ago by Jorge

Parece que la variable item_data del namespace TolInspector no se está limpiando adecuadamente.

Note: See TracTickets for help on using tickets.