Ограничение памяти процесса с помощью MaxWorkingSet - PullRequest
12 голосов
/ 31 января 2011

MSDN:

public IntPtr MaxWorkingSet { get; set; }

Получает или задает максимально допустимый размер рабочего набора для ассоциированного процесс. Значение свойства: максимальное размер рабочего набора, который разрешен в память для процесса, в байтах.

Итак, насколько я понимаю, я могу ограничить объем памяти, который может использоваться процессом. Я пробовал это, но без удачи ..

Код:

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)
        {

        }
    }
}

Я ожидаю исключение OutOfMemory после того, как будет достигнут предел в 2 Мб, но ничего не произойдет. Если я открою диспетчер задач, то увижу, что объем используемой моим приложением памяти постоянно растет без каких-либо ограничений.

Что я делаю не так? Заранее спасибо

1 Ответ

11 голосов
/ 31 января 2011

Нет, это не ограничивает объем памяти, используемый процессом.Это просто оболочка вокруг SetProcessWorkingSetSize, которая а) является рекомендацией, и б) ограничивает рабочий набор процесса, который составляет физическую память (RAM) этого процессаможет потреблять.

Абсолютно не вызовет исключение нехватки памяти в этом процессе, даже если он выделяет значительно больше, чем установлено для свойства MaxWorkingSet.

Есть альтернатива тому, что вы пытаетесь сделать - Win32 Job Object API.Для этого в Codeplex есть управляемая оболочка (http://jobobjectwrapper.codeplex.com/), в которую я внес вклад. Она позволяет вам создать процесс и ограничить объем памяти, который может использовать этот процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...