﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
1708	Uso de RAM en TOL: Asignación de nombres	Pedro Gea	Víctor de Buen Remiro	"Al crear nuevas variables, se aprecia un aumento en el uso de memoria RAM en función de lo poco comunes que sean sus nombres.

Si creamos un gran número de reales con nombres aleatorios la RAM utilizada crece enormemente, mientras que eso no ocurre si tienen el mismo nombre.

A continuación indico un código en el que se generan dos conjuntos de nombres, uno con caracteres obtenidos al azar y otro con un mismo carácter repetido:

{{{
#!java
Real RandInteger(Real min, Real max) { Floor(Rand(min,max+1)) };
Set _RandCharacter.Set = Characters(""abcdefghijklmnopqrstuvwxyz""
  ""ABCDEFGHIJKLMNOPQRSTUVWXYZ_"");
Text RandCharacter(Real void) {
  _RandCharacter.Set[RandInteger(1,53)] 
};
Text RandName(Real length) {
  SetSum(For(1, length, Text (Real i) { RandCharacter(?) }))
};

// Generación de nombres:
Set names = For(1, 10000, Set (Real i) {
  [[ Text RandName(32), Text Repeat(""A"", 32) ]]
});
}}}

Si utilizamos estos nombres para crear un conjunto de números reales con nombre obtenemos que usando el primer nombre:
{{{
#!java
Set For(1, 10000, Set (Real i) {
  Set [[
    Real Eval(""Real ""<<names[i][1]<<"" = 1"")
  ]]
});
}}}
la RAM incrementa en 325 MB.

Mientras que usando el segundo:
{{{
#!java
Set For(1, 10000, Set (Real i) {
  Set [[
    Real Eval(""Real ""<<names[i][2]<<"" = 1"")
  ]]
});
}}}
lo hace en unos 7 MB.

Este resultado no depende del mecanismo utilizado para asignar le nombre, obteniéndose idénticos resultados al usar la función {{{PutName}}}:
{{{
#!java
Set For(1, 10000, Set (Real i) {
  Real one = 1;
  Set [[
    Real PutName(names[i][ <1|2> ], one) // 1 ó 2 según el caso
  ]]
});
}}}"	defect	closed	highest	Mantainance	Kernel	3.1	critical	fixed		
