Сколько экземпляров сборщика мусора создается в ASP.Net, когда несколько приложений работают в одной ОС? - PullRequest
0 голосов
/ 19 октября 2019

Существует ли один GC для ОС для Asp.Net или есть один для каждого CLR / запущенного процесса?

И если он не один для ОС, то как отдельные GC решают, запрашивать ли больше памяти уОС или для исключения OutOfMemory (разве им не нужно иметь представление об общем состоянии памяти ОС)?

1 Ответ

0 голосов
/ 19 октября 2019

1. Для каждого CLR / Process GC нет ОС lvl.

В основном сборщик мусора в .Net имеет два режима Рабочая станция и Режимы .

Рабочая станция предполагают, что на машине запущены другие приложения, и не загружают процессор (, что означает, что другой процесс может использовать процессор для своего собственного ГХ. коллекция ), разрешить другим приложениям / процессам использовать процессор для ИХ СОБСТВЕННЫХ Процесс ГХ.

Режим сервера предполагает, что на сервере не запущено другое приложениеи предполагается, что все процессоры на компьютере доступны для помощи в завершении GC. Этот режим GC вызвал разделение управляемой кучи на пару разделов на каждый процессор. И, как вы можете догадаться, каждый процессор отвечает за каждый раздел управляемой кучи.

По умолчанию все приложения в .Net (включая ASP.NET), работающие на моде Workstation, но мы можем включить через конфигурационный файл Server mod. Как это

<configuration>
  <runtime>
   <gcServer enabled = "true"/>
  </runtime>
 </configuration>
Исключение OutOfMemory будет сгенерировано, когда GC пройдет через все объекты поколений на основе ноль и обнаружит, что памяти недостаточно. И начать собирать коллекцию через все поколения один и два . Если в этом случае он определит, что снова нет памяти, будет выброшено исключение OutOfMemoryException.
...