Подтвердить что ты не робот

Предварительно распределить (гарантировать) память в приложении .NET

Возможно ли, что приложение .NET 3.5 сообщило .NET runtime: "эй, я собираюсь использовать n МБ-память позже, так что, пожалуйста, либо сделайте так много сейчас, либо не сработайте сейчас?"

Контекст для этого: у меня есть консольное приложение С#, которое запускает запрос базы данных, который возвращает много данных, а затем выполняет некоторую обработку. Запрос может занять очень много времени (часы), а использование памяти продолжает увеличиваться по мере чтения результатов. После завершения запроса происходит немедленный всплеск памяти из-за обработки, которую мне нужно сделать. Если на машине не хватает ОЗУ, приложение терпит неудачу в этой точке - после траты времени на запрос! Это очень неприятно для пользователя. Если оперативной памяти недостаточно, я бы хотел, чтобы приложение быстро вышло из строя.

Конечно, я мог бы попробовать взломать как выделение большого массива, который мне действительно не нужен, а затем установить его на нуль, прежде чем мне действительно понадобится память, но это не идеально, потому что это может фактически вызвать процесс для исчерпания памяти, если в противном случае ее хватит. В идеале, я бы хотел использовать больше памяти, чем нужно, но просто не выполнял раньше времени, если определенная сумма не может быть гарантирована в течение всего времени моего приложения. Возможно ли это?

4b9b3361

Ответ 1

Вы можете попробовать использовать класс MemoryFailPoint:

try
{
    using (new System.Runtime.MemoryFailPoint(20)) // 20 megabytes
    {
        ...
    }
}
catch (InsufficientMemoryException)
{
    ...
}