Как мне сообщить .NET, сколько памяти он должен использовать? & сколько памяти он должен выделить для процесса? - PullRequest
1 голос
/ 19 ноября 2009

Я знаю, что .NET не использует полную доступную физическую память. Я обнаружил исключение System.OutOfMemoryException при использовании физической памяти всего лишь 79% Я запускаю свою систему до 92% использования физической памяти.

Вы можете увидеть скриншот здесь: http://a.imagehost.org/0655/CaptureOOM.gif альтернативный текст http://a.imagehost.org/0655/CaptureOOM.gif

Как мне сказать .NET использовать больше памяти?

Я также хочу знать, это исключение из-за недостатка памяти в .NET или .NET есть память, но не для этого приложения?

Ответы [ 3 ]

2 голосов
/ 19 ноября 2009

OutOfMemoryException не имеет ничего общего с физической памятью. Это потому, что у вас не было достаточно большого блока непрерывной виртуальной памяти. Иногда .NET даже создает исключение OutOfMemoryException, если у вас закончились файловые дескрипторы или какой-либо другой ограниченный ресурс.

0 голосов
/ 19 ноября 2009

Вы запускаете это на виртуальной машине? Достаточно ли выделено виртуальной памяти? Насколько велико выделение, которое вы пытаетесь выполнить?

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

0 голосов
/ 19 ноября 2009

Там действительно нет возможности изменить это, он контролируется средой .NET и имеет собственную сборку мусора для управления памятью.

Если у вас есть объекты, которые вы хотите завершить и утилизировать, вы можете принудительно установить GC с помощью

GC.Collect (); GC.WaitForPendingFinalizers ();

Некоторые заметки

Выделил объект другим методом, чем метод Main. Это связано с тем, что если выделенный объект в методе Main затем вызывается GC.Collect в том же методе, объект технически все равно будет связан с выполняющимся кодом и, следовательно, не будет иметь права на сбор.

Метод GC.Collect предназначен не для управления уничтожением конкретного объекта, а для принудительного сбора всех неиспользуемых объектов. Поэтому это очень дорогая операция, и ее следует использовать только в тех случаях, когда вы хотите / должны форсировать глобальный сбор. В ситуациях, когда вы хотите принудительно завершить работу определенного объекта, вы должны реализовать шаблон Dispose.

Надеюсь, это поможет.

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