MSDN:Limitación de memoria de proceso con MaxWorkingSet
public IntPtr MaxWorkingSet { get; set; }
Obtiene o define la máxima permitida tamaño del conjunto de trabajo para el proceso de asociado. Valor de propiedad: El tamaño de conjunto de trabajo máximo permitido en la memoria para el proceso, en bytes.
Por lo tanto, por lo que yo entiendo, puedo limitar la cantidad de memoria que puede ser utilizada por un proceso. He intentado esto, pero sin suerte ..
Algunos código:
public class A
{
public void Do()
{
List<string> guids = new List<string>();
do
{
guids.Add(Guid.NewGuid().ToString());
Thread.Sleep(5);
} while (true);
}
}
public static class App
{
public static void Main()
{
Process.GetCurrentProcess().MaxWorkingSet = new IntPtr(2097152);
try
{
new A().Do();
}
catch (Exception e)
{
}
}
}
Estoy esperando a excepción OutOfMemory después del límite de 2 MB se alcanza, pero no pasa nada .. Si abro el Administrador de tareas Puedo ver que la cantidad de memoria que usa mi aplicación está creciendo continuamente sin ningún límite.
¿Qué estoy haciendo mal? Gracias de antemano
¡Muchas gracias! Algunas preguntas más en este caso :). ¿Qué puede causar un crecimiento significativo del uso del conjunto de trabajo? ¿Y qué sucederá cuando alcance el límite? ¿Será una excepción OutOfMemory o algo más? – Andrey
Cuando el proceso asigna memoria, puede consumir el conjunto de trabajo (RAM). Sin embargo, si hay necesidad de RAM en otros procesos/componentes del sistema, entonces parte del conjunto de trabajo del proceso se puede paginar en el disco. Si usa Objetos de trabajo y se ejecuta en el límite, el proceso finaliza y puede recibir una notificación de que esto sucedió. –
En realidad eso es incorrecto. Working Set es la cantidad de memoria usada recientemente que el proceso espera que necesite en el conjunto de trabajo, que afecta a L1/L2, no a la RAM. Depende del núcleo del sistema operativo cuándo desalojar de WS. El conjunto de trabajo es la memoria LRU que espera que se repita en el procesamiento, por ejemplo, un aspecto pequeño necesita poca WS, mientras que un ciclo grande requiere más. Establecer Working Set no afecta la cantidad de RAM que usará el proceso. –