[Solucionado] Optimizar ram

Iniciado por Segurida, 3 Mayo 2011, 09:37 AM

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

Segurida

Hola, necesito saber cómo puedo optimizar la ram, es decir dejar la mayor cantidad posible de espacio libre, tengo un codigo que encontre en google pero casi no hace nada, se nota pero muy despacito y poco a poco, yo necesito algo mas rapido, se que vaciar la ram es lento, pero con este codigo es mucho mas lento de lo normal, y ademas este codigo retorna acceso denegado:
Código (vbnet) [Seleccionar]

'Previamente se declara la función utilizando Kernel32
Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal process As IntPtr, ByVal minimumWorkingSetSize As Integer, ByVal maximumWorkingSetSize As Integer) As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   'Código dentro de un botón
       Try
           GC.Collect()
           GC.WaitForPendingFinalizers()
           If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then
               SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1)
               Dim myProcesses As Process() = Process.GetProcesses(Environment.MachineName.ToString)
               Dim myProcess As Process
               For Each myProcess In myProcesses
                   SetProcessWorkingSetSize(myProcess.Handle, -1, -1)
               Next myProcess
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try
End Sub


Cambiando esta linea:
Código (vbnet) [Seleccionar]

Dim myProcesses As Process() = Process.GetProcesses(Environment.MachineName.ToString)


Por esta otra:
Código (vbnet) [Seleccionar]

Dim myProcesses As Process() = Process.GetProcessesByName("chrome") 'Vacia la memoria ram de todos los procesos que sean chrome.exe


Se nota mas rapido la diferencia y si se mira el taskmanager se ve como la memoria desciende al minimo, si estas un rato sin usar el chrome y lo haces baja la memoria y se mantiene abajo, si le has usado hacia poco o lo estas usando, baja la memoria un segundo y vuelve a subir, necesito algo que libere el maximo espacio posible, por favor denme una mano, saludos

[D4N93R]

Puedes replantear la pregunta por favor, no entendí muy bien.. :)

seba123neo

Hola, esto funciona, cuando lo ejecute me ocupaba 10 megas, y despues 860 kb.

Código (vbnet) [Seleccionar]
Public Class Form1
    Private Declare Auto Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal procHandle As IntPtr, ByVal min As Int32, ByVal max As Int32) As Boolean

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then
            Dim Mem As Process = Process.GetCurrentProcess()
            SetProcessWorkingSetSize(Mem.Handle, -1, -1)
        End If
    End Sub
End Class


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Segurida

@[D4N93R] Lo que necesito es vaciar la memoria ram desde VB.net (vb 2008) tengo el código que dije antes que funciona pero lo hace muy despacio, y hay que especificar el nombre del proceso, necesito que lo haga o bien con todos los procesos, sin tener que especificar uno a uno manualmente, o bien con la memoria, he leído que se puede vaciar la ram al archivo de paginación de windows (pagefile) pero no se hacerlo, por eso pido ayuda, me da igual un camino que otro, pero prefiero el camino mas rápido par vaciar la mayor cantidad posible de ram, en definitiva, una forma de optimizar, desfragmentar o liberar la memoria ram, pero una forma que funcione y se note una diferencia rápida.
@seba123neo Eso solo funciona con la aplicación actual, lo necesito para todos los procesos o toda la memoria ram...

gracias a los dos por la ayuda y esfuerzo, se los agradezco, si se les ocurre algo aqui estaré :)

seba123neo

no tenia idea que funcionaba con otros procesos, todos los ejemplos que hay en internet son para el propio proceso.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Segurida

@seba123neo el código que puse al principio, o hace con todos, pero la gran mayoría devuelve acceso denegado, y necesito algo para que funcione con todos, de la manera que propongo, o de otra diferente, ya me quedé sin ideas...
gracias de nuevo :)

Khronos14

La función SetProcessWorkingSetSize no optimiza la memoria RAM, más bien al contrario. Lo que hace es volcar parte de la memoria RAM de un proceso en la memoria VIRTUAL del sistema, haciendo que la aplicación trabaje más lenta pero consuma menos memoria.

De la administración de la memoria se tiene que encargar el sistema operativo, no una aplicación ejecutándose en el CIL corriendo en el RING 3...

Saludos.

Segurida

@Khronos14 Realmente lo que se dice optimizar, no lo hace, pero si vacía la memoria, y permite que el sistema operativo reaccione cuando se cuelga, o que vaya más rápido cuando se ralentiza...
Por eso necesito un camino para poder hacerlo con todos los procesos, o hacer algo para que vacíe la mayor cantidad posible de ram...

Khronos14

@Segurida ¿sabes lo que es la memoria virtual?

La memoria virtual es una región del disco duro que se emplea como memoria auxiliar a la RAM, por ejemplo, cuando no queda más memoria RAM. Si fuerzas a que los procesos vuelquen parte de su memoria RAM en el disco, provocas más accesos al disco duro, haciendo que el sistema vaya más lento.

Es imposible que el sistema vaya más rápido cuando se ralentiza. La memoria RAM tiene un tiempo de acceso ínfimo, en cambio los discos duros son lentísimos en comparación con la memoria RAM, además que tienen una velocidad de lectura y escritura limitada.

Segurida

@Khronos14 La memoria virtual creo que es el archivo pagefile, pero no sabia que lo ralentizara, en mi compu cuando vacio parte de la ram de esa manera, no se ralentiza, entonces ¿hay alguna manera de optimizar el sistema para acelerarlo, aunque sea temporalmente?
gracias