Autor
|
Tema: [Solucionado] Optimizar ram (Leído 9,506 veces)
|
Segurida
Desconectado
Mensajes: 61
|
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: '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: Dim myProcesses As Process() = Process.GetProcesses(Environment.MachineName.ToString)
Por esta otra: 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
|
|
« Última modificación: 14 Mayo 2011, 19:03 pm por Segurida »
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Puedes replantear la pregunta por favor, no entendí muy bien..
|
|
|
En línea
|
|
|
|
seba123neo
|
Hola, esto funciona, cuando lo ejecute me ocupaba 10 megas, y despues 860 kb. 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.
|
|
|
En línea
|
|
|
|
Segurida
Desconectado
Mensajes: 61
|
@[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é
|
|
|
En línea
|
|
|
|
seba123neo
|
no tenia idea que funcionaba con otros procesos, todos los ejemplos que hay en internet son para el propio proceso.
|
|
|
En línea
|
|
|
|
Segurida
Desconectado
Mensajes: 61
|
@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
|
|
|
En línea
|
|
|
|
Khronos14
Desconectado
Mensajes: 443
A lie is a lie
|
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.
|
|
|
En línea
|
|
|
|
Segurida
Desconectado
Mensajes: 61
|
@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...
|
|
|
En línea
|
|
|
|
Khronos14
Desconectado
Mensajes: 443
A lie is a lie
|
@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.
|
|
|
En línea
|
|
|
|
Segurida
Desconectado
Mensajes: 61
|
@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
|
|
|
En línea
|
|
|
|
|
|