Galllego pero se me ocurre algo re facil. quizas bobo, pero ahi va, seguramente en algun momento instancias el float o lo hace el mapper ? si lo hace el mapper busca donde si lo haces vos , algo asi;
asFloat: aBuffer "devuelve un float del abuffer value " "suponiendo que buffer es lo que te da la db" ^ aBuffer value= 0.0 ifTrue:[ self ceroFloat " devuelve una instancias de float 0.0"] ifFalse:[ "lo que hacia antes"]. Tambien se me ocurre el problema podria estar en el mapeador que usan? ReStore? unop propio? o el de Alan Knight no recuerdo el nombre... saludos jmdc 2012/5/3 GallegO <[email protected]> > Hola Marcelo, > > si es lo que veniamos planteando, no se si no se entendio pero > basicamente para cuando viene de las BD la cosa anda barbara, el tema > es que cuando haces cuentas, intervienen primitivas y la VM se encarga > de instanciar el resultado y no tenes control desde el lado de > Smalltalk de que numero se instancia (por lo menos en Dolphin no > conozco forma de controlarlo). > > Y no obvio en Dolphin no son float flyweight ni mucho menos jaja pesan > como 80 megas los float esos jaja increible para tener todos 0 un > cagadon. > > Saludos > GallegO > > El día 3 de mayo de 2012 14:56, Juan <[email protected]> > escribió: > > Hola Gallego ,gente > > > > Che una idea no se si aplica, > > No podrias usar un proxy cuando traes la data, y alli manejar el caso del > > 0.0 yo usaria un singleton, pero aqui > > viene mi duda , no son los floats flyweight en Dolphin? sino es asi, > podrias > > usar un factory o sea un metodo de creacion en la clase que devuelva una > > instancia siempre la misma, o que administre proxy's donde tambien > podrias > > volver a administrar la creacion, o sea un mix entre flyweight y proxy. > > que te/les parece? > > salud2 > > jmdc > > > > > > 2012/5/3 [email protected] <[email protected]> > > > >> Si el tema es "emprolijar" lo feo podrías subclasificar Float y hacer > >> algo similar a lo que Symbol hace con String. Podrías mantener un > >> pool, incluso con algún criterio estadístico, en donde no guardes todo > >> sino lo que mas te aparezca (como el 0.0). También podrías redondear > >> lo que se pueda, no nos olvidemos que Float ya trunca las cosas y se > >> manda sus mocos sin ayuda de nadie. > >> > >> On 3 mayo, 14:39, GallegO <[email protected]> wrote: > >> > Hola: > >> > > >> > Les respondo aclarando la situación. > >> > > >> > Ya implemente un flyweight para cuando traigo floats de la base de > >> > datos. Luego de observar los resultados llegue a la conclusión que por > >> > perfomance, en mi caso particular, no valía la pena el flyweight (que > >> > lo habia implementado con un WeakSet). La mayoría de mis valores eran > >> > 0.0, entonces simplemente evito el 0.0, cuando viene un 0.0 > >> > instanciado por el driver, en el lugar donde se mapea eso a los > >> > objetos directamente si viene 0.0 lo descarto y al objeto le pongo el > >> > SmallInteger 0, simple y rápido. Si se pone peludo algun día tenes la > >> > posibilidad de hacer eso e incluso hacerlo para Date, Time, TimeStamp > >> > e incluso String. > >> > > >> > Pero el problema que tengo es en unos objetos que calculamos en > >> > memoria para un periodo x de tiempo. Por ejemplo calcular la > >> > producción de 30 dias de 5000 pozos, suponiendo que cada producción > >> > tiene 20 valores numericos que mantiene en variables de instancia, eso > >> > te da unos 3 millones de instancias de Float. > >> > > >> > Ahora, entiendo perfectamente que podemos trabajar ahí también para > >> > evitar tener todo eso calculado, o evitar tener al menos tantos Float > >> > 0.0 pero por como están programados todos los cálculos se hace muy > >> > complicado (y feo) manejar esto en todos lados. De ultima que cada > >> > seter de las variables de instancias pongo codigo que maneje un > >> > flyweight o el Float zero al menos, pero es algo feo feo. > >> > > >> > Por eso pregunto por algo "transparente" como seria poder modificar la > >> > VM o las primitivas al menos, que en mi caso por ser Dolphin no puedo. > >> > > >> > Recién veo el mail de Juan Vuletich, en Dolphin tengo FloatArray > >> > tambien. Calculo que en vez de variables de instancia podría tener un > >> > array de estos en mis objetos y los accessors que apunten a cada una > >> > de las posiciones del array. No se si te referis a que es posible ese > >> > uso. Ja! no me imagino lo que tendría que testear... > >> > > >> > De todas maneras tener en Smalltalk reflexividad sobre la > >> > instanciacion como los Symbol estaría buenísimo. > >> > > >> > Bueno, viendo esta perspectiva ¿que me sugieren? :D > >> > > >> > Saludos > >> > GallegO > >> > > >> > El día 3 de mayo de 2012 14:16, Angel Java Lopez > >> > <[email protected]> escribió: > >> > > >> > > >> > > >> > > 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 > > > > > > -- > > 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
