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.

Ticket #872: ticket_19.LostInstances.tol

File ticket_19.LostInstances.tol, 1.7 KB (added by pgea@…, 15 years ago)
Line 
1//////////////////////////////////////////////////////////////////////////////
2
3Class @Sample {
4  Matrix _.sample = Rand(1000,1,0,1);
5  Real GetAverage(Real void) {
6    MatAvr(_.sample)
7  }
8};
9// Nota: si se compila y decompila este archivo, debido a los objetos
10// de tipo @Sample que se pierden por la concatenación de varios "::"
11// esta clase no se decompilará y no hará falta volver a crearla.
12// Basta con comentar su definición.
13// A propósito, ¿hay alguna manera de saber si una clase está definida?
14
15NameBlock SampleCreator = [[
16  @Sample CreateSample(Real void) { @Sample new }
17]];
18
19//////////////////////////////////////////////////////////////////////////////
20// (1) Ejemplo1:
21// Se llama mil veces al creador de "samples" pidiéndole el promedio.
22// Las instancias de los @Sample no se destruyen aumentando la memoria.
23
24Real mem01 = MemoryStatus(?)[3];
25
26Set For(1, 1000, Real (Real i) {
27  Real SampleCreator::CreateSample(?)::GetAverage(?);
28  0
29});
30
31Real mem02 = MemoryStatus(?)[3];
32WriteLn("Memoria usada aproximadamente: "<<(Real (mem01-mem02)/1024));
33
34//////////////////////////////////////////////////////////////////////////////
35// (2) Ejemplo2:
36// Se llama mil veces al creador de "samples" pidiéndole el promedio.
37// Pero se evita concatenar varios "::".
38// Las instancias de los @Sample se destruyen y no hacen aumentar la memoria.
39
40Set For(1, 1000, Real (Real i) {
41  NameBlock sample = SampleCreator::CreateSample(?);
42  Real sample::GetAverage(?);
43  0
44});
45
46Real mem03 = MemoryStatus(?)[3];
47WriteLn("Memoria usada aproximadamente: "<<(Real (mem02-mem03)/1024));
48
49//////////////////////////////////////////////////////////////////////////////