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
Component: | Interface → Toltcl |
---|---|
Severity: | normal → major |
Status: | new → accepted |
comment:2 Changed 12 years ago by
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
Parece que la variable item_data del namespace TolInspector no se está limpiando adecuadamente.
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.