elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Comprimir proceso en la RAM
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Comprimir proceso en la RAM  (Leído 11,570 veces)
kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Comprimir proceso en la RAM
« Respuesta #20 en: 27 Julio 2013, 03:29 am »

@El Benjo: Lo que comentas no es nada más ni nada menos que la reutilización de variables. La misma variable va tomando distintos valores, en este caso objetos, por cada iteracción del bucle For.

Otra opción sería la de liberar el contenido de las variables de la siguiente manera:

Código
  1. ...
  2.                   oUser = Nothing
  3.                   pUser = Nothing
  4. ...
  5.  

De esta forma le estás indicando al GC que libere el contenido de dicha variable. GC = Garbage Collector.

Saludos!


En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: Comprimir proceso en la RAM
« Respuesta #21 en: 27 Julio 2013, 09:10 am »

Pero cada cuanto tiempo se libera la memoria del GC, porque hay que recordar que el GC no limpia la memoria cada que hacemos "Variable = Nothing".

Según sé, lo hace apróximadamente cada tres segundos. Imagínate que continúa con su código como está y simplemente hace

Código
  1. oUser = Nothing
  2. pUser = Nothing
  3.  

y lo hace tan rápido que supera al GC. Pues va pasar que por un momento, aunque sea breve, va seguir ocupando los mismos 900 Mb de memoria. Ahora eso se resuelve forzando al GC a que limpie la memoria después de cada "Variable = Nothing", pero el código se vuelve lento y no es recomendable. Por eso que sugería la reutilización de variables.

Ikillnukes, intenta las tres formas y nos dices con cuál te fue mejor. Saludos.


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Comprimir proceso en la RAM
« Respuesta #22 en: 27 Julio 2013, 12:37 pm »

@ElBenjo: Exacto, no es una práctica recomendable setear las variables a Nothing. Particularmente prefiero la reutilización de variables o la implementación de IDisposable dentro del Objeto para después llamar a Dispose(). Como dije anteriormente el GC resta velocidad a la aplicación y por lo tanto eficiencia.

Estaría bien que Ikillnukes provase todas las opciones aquí mencionadas.

Saludos!
En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Comprimir proceso en la RAM
« Respuesta #23 en: 27 Julio 2013, 16:51 pm »

Invoca al garbage collector a mano
Código
  1. Dim a As Object
  2. A =  New ....
  3.  
  4. .......
  5. A.Dispose() ' siempre que se pueda
  6. A = Nothing
  7. GC.Collect()
  8.  

Sent from my LG-E612g
En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Comprimir proceso en la RAM
« Respuesta #24 en: 27 Julio 2013, 17:01 pm »

@raul338: Llamar al Garbage Collector se considera mala práctica, pues es el mismo quien se invoca automáticamente para liberar los recursos no utilizados tales como variables no utilizadas o sin referenciar (var = nothing). Si el Objeto implementa IDisposable, es decir, tiene por método Dispose(), pues has de llamarlo ya que es el destructor del objeto. Si hicieras ->
Código
  1. Obj = Nothing
lo que estás haciendo es quitar la referencia al objeto, pero no lo estás liberando, sigue en memoria, lo único que el Garbage Collector lo suprimirá cuando sea invocado, pero llamarlo en cada iteracción (como el ejemplo de Ikillnukes) sería una locura.

Saludos!
En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines