Tirando ideas sin conocer tu problema te diría
0) Me parece bien que si podés resolverlo en el mapeo, entonces no
usar mensajes #used ni subclasificar Float.
1) Que uses Set en lugar de WeakSet (y que te pongas las pilas en
manenter ese pool ;-))
2) Que no metas en el pool todos los Floats, solo los mas usados. Si
instancias 3 millones y te quedan 3 millones en el pool, entonces no
sirvió para nada. Probá bajando el tamaño del pool a 100, a 1000, a
10000 o a lo que te resulte óptimo. Hoy tenés un pool de 1 objeto, el
0.0 :-)
3) Trataría de no tener ningún prejuicio sobre qué será rápido o qué
será lento. Incluso si la resolución te da, podrías usar enteros.

Saludos,
Diego


On 3 mayo, 14:54, GallegO <[email protected]> wrote:
> Diego:
>
> yo tengo las mismas estadísticas pero lo que no viene de la BD es más
> complicado o queda más a la vista.
> (5000 / 24.0) used o #unique o lo que sea, es un bajón. Cuando viene
> de la BD te queda escondido en el mapeo que si es relativamente
> automático no tenes que volverlo a tocar.
>
> Subclasificar Float? no se haria una mescolanza terrible?
>
> Para eso uso ScaledDecimal (despues vemos como anda :)
> El tema es la performance también, por eso me gusta el Float.
>
> Saludos
>
> El día 3 de mayo de 2012 14:43, [email protected]
> <[email protected]> escribió:
>
>
>
> > Tal vez me estoy yendo de tema, pero en un sistema que hice para
> > procesar muchos datos terminé aplicando flyweights a cosas que no
> > esperaba, como numeros, fechas o nombres. Por ejemplo, si tengo una
> > colección con 1 millon de "Facturas del mes", entonces la cantidad de
> > fechas posibles son 30 y no 1 millón. Y está claro que tener 30 fechas
> > es mas barato en términos de memoria y de muchas operaciones (y a
> > veces mas caro de instanciar al principio). Viniendo de un pasado de
> > bases de datos relacionales, siempre tendía a "factorizar" lo obvio,
> > cosas como Ciudad, Cliente, Género, Tipo, etc.. Pero nunca pensé que
> > el importe de una factura , la fecha o un "campo string" debían
> > factorizarse. Pero en Smalltalk resulta muy natural hacerlo y darse
> > cuenta que tampoco suelen existir 1 millón de importes distintos, ni
> > un millón de nombres distintos, de hecho los nombres de personas son
> > muy pocos. Además en ese tipo de colecciones, los objetos suelen tener
> > mas de una fecha y mas de un variable de instancia de tipos numéricos,
> > por lo que la misma instancia suele vivir en varias partes del objeto.
> > Si me tocara analizar a la población de Argentina, la fechas de
> > nacimiento REALES no serían 40 millones, serían unas 40 mil, o sea mil
> > veces menos objetos. Algo que a veces pasa es que cuando se encuentran
> > muchas repeticiones el tiempo de instanciación de las colecciones
> > también baja mucho porque a la VM le cuesta menos hacer búsquedas que
> > reservar tanta memoria.
> > Para tranformar un objeto en otro que esté siendo usado previamente
> > les mando el mensaje #used, que obviamente me devuelve el objeto del
> > pool para su reemplazo. Todo esto tiene muy bajo costo en términos de
> > diseño y empiezan a aparecer beneficios por donde uno menos lo espera.
> > En mi caso, a clave fue sacarme las reglas de factorización de la
> > cabeza y prestarle mas atención al inspector de Smalltalk.
>
> > Diego Coronel
>
> > On 3 mayo, 14:16, Angel Java Lopez <[email protected]> wrote:
> >> Interesante tema/problema..
>
> >> Por que hay millones de float? Yo me imagino algun calculo, pero igual
> >> luego el garbage collector deberia liberarlos. El problema es la memoria?
> >> se acaba? Se necesitan los millones de floats, digo, que esten
> >> referenciados y no sean liberados por el GC? no habra forma de cambiar el
> >> algoritmo? O el problema es el tiempo (mucho tiempo creando) y no la
> >> memoria?
>
> >> 2012/5/3 [email protected] <[email protected]>
>
> >> > Hola GallegO,
> >> > Supongo que habrás hecho un flyweight y es lo que generalmente me
> >> > sirvió. Tal vez si contarás un poco mas surjan mas ideas, en las cosas
> >> > que me topé terminé por darme cuenta que los números son muchísimos
> >> > menos que los que parecen, en matemática son infinitos pero en la
> >> > compu no, y en la realidad mucho menos.
>
> >> > Abrazo
>
> >> > Diego
>
> >> > On 3 mayo, 13:04, GallegO <[email protected]> wrote:
> >> > > Gente:
>
> >> > > Quería saber si alguien se le ocurre de que forma uno puede evitar la
> >> > > instanciación de Float en Dolphin, o si se les ocurren en cualquier
> >> > > Smalltalk en forma transparente. Tengo un problemita con algunos
> >> > > millones de floats. En algunos lados lo puedo solucionar con un
> >> > > lightweight pero cuando se usan primitivas en un calculo estoy al
> >> > > horno.
>
> >> > > Gracias por su ayuda :)
>
> >> > > Saludos
> >> > >   GallegO
>
> >> > --
> >> > To post to this group, send email to [email protected]
> >> > To unsubscribe from this group, send email to
> >> > [email protected]
>
> >> >http://www.clubSmalltalk.org
>
> > --
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to 
> > [email protected]
>
> >http://www.clubSmalltalk.org

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a