Curiosidad sobre optimización de memoria

Iniciado por Meta, 6 Diciembre 2009, 12:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

Hola:

Hace años, para que funcionace bien un programa, había que buscar la manera de que quepa en la memoria RAM. Hoy en día, ya nadie le importa, hay tanta RAM que ni se preocupan de estos recursos.

Antes ponía un integer así:

string saludo = "Hola. ¿Cómo están todos?"; // Así no optimizas la memoria, más bien la desperdicia.

Como resultado de salida muestra: Hola. ¿Cómo están todos?
Si te fijas hay 24 bytes y sobran muchos, ya que un int reserva mucha más memoria y es un tremendo desperdicio.


Hay que ponerlo así:

string saludo[3] = "Hola. ¿Cómo están todos?"; // Su salida cuenta del 0 al 3, es decir, de la H a la a. Con lo cual, sólo muestra la palabra Hola. Para que se vea completo hay que usar...

string saludo[23] = "Hola. ¿Cómo están todos?"; // Aquí ya se muestra la frase completa.

Lo que puse arriba es un ejemplo. Normalmente se hace con int.

En C#. ¿Cómo se hace la optimización de memoria?

Vale la pena optimizar memoria, ya que en programas grandes se nota la velocidad.

Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

[D4N93R]

HOla,

Yo no soy un experto ni nada, pero dentro de lo que se, los lenguajes .Net tienen un Garbage Collector (GC), que se hace responsable por toda la data que queda en memoria sin que nadie apunte a ella. Es decir, en el momento que dejas de apuntar a una variable y el GC pasa por la memoria él se hace cargo de liberar los recursos..

Además puedes forzar a que pase el GC en el momento que quieras..

Creo que es algo así: GC.Collect();

saludos..

raul338

Exacto, como dice D4N93R: el .net tiene su propio gestor de memoria. Pero es considerado mala practica llamarlo "a la fuerza"

Si utilizas clases (ya sean propias o del .net framework) puedes "liberarlas" usando (si disponen) el metodo Dispose

[D4N93R]

Raul,

Es correcto, es "mala práctica" forzarlo, pero a veces es necesario dependiendo del caso. Además el método dispose funciona nada más cuando el objeto contiene parte en código nativo o llamadas al sistema.

En realidad lo mejor es dejar todo así y que .Net se encargue de todo.. esa es la idea principal no? xD

Saludos!

raul338

Concuerdo contigo D4N93R. Por eso dijimos que no hacia falta el "control de memoria"


[D4N93R]


MazarD

Citarstring saludo = "Hola. ¿Cómo están todos?"; // Así no optimizas la memoria, más bien la desperdicia.
Porque se desperdicia memoria? se utiliza la justa, más algun puntero con la dirección de memória para redimensionar.
De todos modos en c# no puedes declarar cadenas de tamaño fijo, simplemente porque el ahorro de memória es mínimo, apenas algun puntero y puede que algún unsigned para guardar el tamaño.

En los lenguajes en los que se permite string[11] es más por motivos conceptuales y control de excepciones, una cadena que nunca pueda superar ese tamaño como una matricula o lo que sea y en caso contrario tire error.

CitarLo que puse arriba es un ejemplo. Normalmente se hace con int.
Puedes explicar eso? como se optimiza la memoria ocupada por un int? :S

Como dicen los compañeros más arriba, lo bueno de los lenguajes de alto nivel como .net y java es que en caso de que quedaran memory leaks está el garbage collector para solucionar el problema.
De todos modos siempre es bueno que no llegue a pasar eso, y que se libere la memoria automáticamente no significa que el código esté optimizado...

Saludos!
-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net

Meta

Entendido, ya no estamos 20 años atrás que esa época si se necesitaba optimizar.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

[D4N93R]

Igual puedes optimizar tus rutinas! eso siempre lo tendrás que hacer!

Saludos!

Foxy Rider

además, no tenés eliminación determinística, pero podés usar el using para "sugerir" la eliminación de un objeto pasado el scope (que implemente IDisposable) ...
otro detalle es que un cuellito de botella a veces es el Garbage Collector en si (en mono por ejemplo andan laburando a full con esto)

aunque, no capto la esencia del topic, optimizar el uso de memoria por rapidez o por economizar ? (la primera no tiene sentido, la segunda sí)

CitarEntendido, ya no estamos 20 años atrás que esa época si se necesitaba optimizar.

indeed, aunque si tomar determinadas prácticas óptimas ...
(me encantaría extenderme en esto, pero tengo que irme )

Saludos ~