Liberar memoria

20/01/2006 - 11:17 por Carles | Informe spam
Hola

Tengo una aplicación para dispositivos móviles con C# y me gustaría saber
como puedo forzar a liberar memoria, es decir, forzar la destrucción de unas
clases ya que no se liberan automáticamente.

¡Gracias!
Carles

Preguntas similare

Leer las respuestas

#1 Yamil Bracho
20/01/2006 - 14:11 | Informe spam
Si no se liberan automaticamente quiere decir que existe alguna referencia
en memoria que no deja que el gc las elimine. Asegurate de que no tengas eso
en tu programa.
Otra cosa que puedes hacer es que si sabes que ya no vas a utilizar mas una
variable asignarle null para marcala como elegible a ser eliminada por el gc

"Carles" wrote in message
news:
Hola

Tengo una aplicación para dispositivos móviles con C# y me gustaría saber
como puedo forzar a liberar memoria, es decir, forzar la destrucción de


unas
clases ya que no se liberan automáticamente.

¡Gracias!
Carles
Respuesta Responder a este mensaje
#2 Jose Luis Manners
20/01/2006 - 16:16 | Informe spam
Lo recomendable es llamar el método Dispose del objeto que no necesites y
luego asignarle el valor de null. El GC ya se encargara de hacer su truco.

-
Coopera con el foro. Dinos si te sirvió la respuesta aquí planteada.
-

Saludos,

Jose Luis Manners, MCP
http://www.josemanners.com/

"Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
-Blaise Pascal

"Carles" wrote in message
news:
Hola

Tengo una aplicación para dispositivos móviles con C# y me gustaría saber
como puedo forzar a liberar memoria, es decir, forzar la destrucción de
unas
clases ya que no se liberan automáticamente.

¡Gracias!
Carles
Respuesta Responder a este mensaje
#3 jcolivares
20/01/2006 - 16:18 | Informe spam
También puedes mandar llamar explícitamente al recolector de basura
con System.GC.Collect(); Los objetos ya no deben estar utilzándose
(referencias nulas como en el mensaje anterior). Lo más aconsejable es
que se llame el recolector de basura automáticamente. Ademas, en
teoría, en dispositivos móviles con Windows CE (Pocket PCs y
Smartphone) el sistema controla la memoria ya que en caso de ocupar
más memoria cerrará programas ociosos. Yo tengo problemas con un
programa que utiliza sockets en Pocket PC por que a pesar de que libera
memoria no funciona adecuadamente.


Carles ha escrito:

Hola

Tengo una aplicación para dispositivos móviles con C# y me gustaría saber
como puedo forzar a liberar memoria, es decir, forzar la destrucción de unas
clases ya que no se liberan automáticamente.

¡Gracias!
Carles
Respuesta Responder a este mensaje
#4 José Escrich
23/01/2006 - 01:10 | Informe spam
Hello Carles,

Lo que debes hacer es implementar IDisposable y liberar de manera explicita
tus recursos. Fijate que no necesariamente todos los componentes que utilizas
disponen de .Dispose(). Entonces implementa IDisposable y alli libera los
recursos, sin este manejo explicito de nada te servira llamar al GC.Collect
ó simplemente al Dispose. En el caso del Collect no necesariamente te resolverá
el problema porque es mas complicado que eso, existen varias generaciones
de objetos y no sabes realmente en que generación han quedado, es decir es
totalmente azaroso ese metodo a menos que conozcas a detalle el ciclo de
vida de los objetos. Respecto a Dispose, puedes llamarlo de los objetos que
lo tengan implementado pero justamente no son esos objetos los que te deben
estar causando problema sino lo que no lo tienen y seguramente desarrollaste.

Un ejemplo:

public class MyObject: IDisposable
{

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// aca debes limpiar explicitamente los objetos que cuelguen de
este mismo.
}
}

// En el destructor debes llamar al Dispose explicitamente
// para hacer una destrucción "guiada"
~MyObject()
{
Dispose (false);
}

saludos, espero te aclare.




José Escrich
jescrich (a) gmail.com
http://latincoder.com

C> Hola
C>
C> Tengo una aplicación para dispositivos móviles con C# y me gustaría
C> saber como puedo forzar a liberar memoria, es decir, forzar la
C> destrucción de unas clases ya que no se liberan automáticamente.
C>
C> ¡Gracias!
C>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida