Establecer el límite de memoria del proceso de Windows (o usuario)

¿Hay alguna forma de establecer un límite de memoria de todo el sistema que un proceso pueda usar en Windows XP? Tengo un par de aplicaciones inestables que funcionan bien la mayor parte del tiempo pero que pueden afectar a un error que resulta en consumir toda la memoria en cuestión de segundos (o al menos supongo que así es). Esto da como resultado un restablecimiento completo ya que Windows deja de responder por completo y pierdo mi trabajo.

Me gustaría poder hacer algo como / etc / limits en Linux: configurar M90, por ejemplo (para establecer el 90% de memoria máxima para un solo usuario para asignar). Entonces el sistema obtiene el 10% restante sin importar nada.

Use objetos de trabajo de Windows. Los trabajos son como grupos de procesos y pueden limitar el uso de la memoria y la prioridad del proceso.

Use la herramienta Application Verifier (AppVerifier) de Microsoft.

En mi caso, necesito simular que la memoria ya no esté disponible, así que hice lo siguiente en la herramienta:

  1. Agregué mi aplicación
  2. Desmarcado Básico
  3. Comprobación de baja simulación de recursos
    • Cambié TimeOut a 120000 – mi aplicación se ejecutará normalmente durante 2 minutos antes de que todo entre en vigor.
    • Cambió HeapAlloc a 100 – 100% de probabilidad de error de asignación de montón
    • Establecer Stacks en true – la stack no podrá crecer más grande
  4. Salvar
  5. Comience mi aplicación

Después de 2 minutos, mi progtwig ya no podía asignar memoria nueva y pude ver cómo se manejaba todo.

Dependiendo de sus aplicaciones, podría ser más fácil limitar la memoria que usa el intérprete de idiomas. Por ejemplo, con Java puede establecer la cantidad de RAM que se asignará a la JVM.

De lo contrario, es posible configurarlo una vez para cada proceso con la API de Windows

SetProcessWorkingSetSize Function

No hay manera de hacer esto que yo sepa, aunque tengo mucha curiosidad por leer si alguien tiene una buena respuesta. He estado pensando en agregar algo como esto a una de las aplicaciones que construye mi empresa, pero no he encontrado una buena manera de hacerlo.

Lo único que puedo pensar (aunque no directamente en el punto) es que creo que puedes limitar el uso total de memoria para una aplicación COM + en Windows. Sería necesario que la aplicación se escriba para ejecutarse en COM +, por supuesto, pero es la forma más cercana que conozco.

El conjunto de tareas es bueno (los objetos de trabajo también controlan los conjuntos de trabajo), pero no es el uso total de la memoria, sino el uso real de la memoria (paginado) en cualquier momento. Puede funcionar para lo que quieras, pero afaik no limita la memoria total asignada.