1 | ////////////////////////////////////////////////////////////////////////////// |
---|
2 | |
---|
3 | Class @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 | |
---|
15 | NameBlock 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 | |
---|
24 | Real mem01 = MemoryStatus(?)[3]; |
---|
25 | |
---|
26 | Set For(1, 1000, Real (Real i) { |
---|
27 | Real SampleCreator::CreateSample(?)::GetAverage(?); |
---|
28 | 0 |
---|
29 | }); |
---|
30 | |
---|
31 | Real mem02 = MemoryStatus(?)[3]; |
---|
32 | WriteLn("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 | |
---|
40 | Set For(1, 1000, Real (Real i) { |
---|
41 | NameBlock sample = SampleCreator::CreateSample(?); |
---|
42 | Real sample::GetAverage(?); |
---|
43 | 0 |
---|
44 | }); |
---|
45 | |
---|
46 | Real mem03 = MemoryStatus(?)[3]; |
---|
47 | WriteLn("Memoria usada aproximadamente: "<<(Real (mem02-mem03)/1024)); |
---|
48 | |
---|
49 | ////////////////////////////////////////////////////////////////////////////// |
---|