Página 1 de 1

C# Liberar la memoria de una aplicacion al finalizarla

Publicado: 28 Nov 2013 17:24
por Metafunken
Hola mis buenes, ahora vengo con esta gran incognita y como el titulo lo canta a gritos, a ver si alguien me puede echar una manita para ver de que manera puedo liberar la mayor cantidad posible de memoria de un Windows Forms al salir de la app.

Utilizaba GC.Collect(); a secas pero documentandome segun no funciona al 100% (solo) y navegando por ahi me encontre este codigo:
        [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize);
public static void MemoryOwnFormFree()
{
GC.Collect();
GC.WaitForPendingFinalizers();
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}

Ustedes que tienen mas experiencia que tan factible consideran este codigo?

De que manera podria hacerlo para que al terminar mi aplicacion se liberara la mayor cantidad de memoria posible?

Otra, como podria identificar un proceso para liberar el uso de su memoria tambien? Tengo la idea pero me la reservo para no comentar una pndjada.

Gracias por su ayuda...
Saludos ;)

Publicado: 28 Nov 2013 17:34
por Pabloko
c# tiene su propio garbage collector y esta todo automatizado, solo es necesario en algunas tareas que incluyan codigo unmanaged

Publicado: 28 Nov 2013 18:36
por Metafunken
Gracias garra comprendido esta...

Me surgio la duda porque navegando me salieron con que GC no es tan bueno y segun hasta donde comprendo y tengo por entendido al finalizar la aplicacion Sharp se encarga de todo y que GC sirve para forzar la recoleccion y eliminacion de la basura generada. Ahora me queda mas que claro.

Gracias viejo ;)

Publicado: 29 Nov 2013 06:19
por Pabloko
Yo cuando uso webkit si que lo utilizo

CefTask.Post(CefThreadId.UI, () =>
{
});
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();

GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();

CefTask.Post(CefThreadId.IO, () =>
{
});

CefTask.Post(CefThreadId.File, () =>
{
});


Como truco para hacer una apertura limpia pero ya te digo si tu codigo es totalmente managed no lo necesitas

Publicado: 29 Nov 2013 08:05
por Metafunken
Vientos garra, ya que ande por alla le dare a tu code, se agradece viejo...

Saludos ;)
Offtopic:
Ponte tu gif no mmes Pablo, como que con ese te ves muy anaranjado :) el otro traje te hacia ver mas tu