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
