Net framework 5, а также среды Visual Studio 2012 и C#


Глава.21 .Автоматическое.управление.памятью.(уборка.мусора) режимы уборки мусора



Download 6,27 Mb.
Pdf ko'rish
bet419/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   415   416   417   418   419   420   421   422   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

570
Глава.21 .Автоматическое.управление.памятью.(уборка.мусора)
режимы уборки мусора
При запуске CLR выбирается один из режимов уборки мусора, который не может 
быть изменен до завершения процесса. Существует два основных режима уборки 
мусора:
‰
Режим рабочей станции.
Этот режим настраивает уборку мусора для при-
ложений на стороне клиента. Он оптимизирован для минимизации времени 
приостановки потоков приложения, чтобы не раздражать пользователя. Уборщик 
предполагает, что на компьютере работают другие приложения, и старается не 
занимать слишком много ресурсов процессора.
‰
Режим сервера.
Этот режим оптимизирует уборку мусора для приложений на 
стороне сервера. Уборщик предполагает, что на машине не запущено никаких 
сторонних приложений (клиентских или серверных), поэтому все ресурсы про-
цессора можно бросить на уборку мусора. В этом режиме управляемая куча раз-
бирается на несколько разделов — по одному на процессор. Изначально уборщик 
мусора использует один поток на один процессор. Каждый поток выполняется 
в собственном разделе одновременно с другими потоками. Такой подход хорошо 
работает в случае приложений с единообразным поведением рабочих потоков. 
Функция работает на компьютерах с несколькими процессорами; только в этом 
случае параллельная обработка потоков позволяет получить прирост произво-
дительности.
По умолчанию приложения запускаются в режиме рабочей станции с включен-
ным режимом параллельной уборки мусора. А серверные приложения (например, 
ASP.NET или SQL Server), обеспечивающие хостинг CLR, могут потребовать за-
грузки режима сервера. Однако если серверное приложение запускается на одно-
процессорной машине, CLR всегда использует режим рабочей станции. Автономное 
приложение может приказать CLR использовать серверный уборщик мусора путем 
создания конфигурационного файла (о том, как это сделать, рассказывалось в гла-
вах 2 и 3), содержащего элемент 
gcServer
. Вот пример конфигурационного файла:





Узнать, запущена ли среда CLR в серверном GC-режиме, можно при помощи 
логического свойства 
IsServerGC
класса 
GCSettings
, предназначенного только 
для чтения:
using System;
using System.Runtime; // GCSettings находится в этом пространстве имен


571
Поколения
public static class Program {
public static void Main() {
Console.WriteLine(
"Application is running with server GC=" + GCSettings.IsServerGC);
}
}
Кроме двух основных режимов, у уборщика мусора существует два подрежима: 
параллельный (используемый по умолчанию) и непараллельный. В параллельном 
режиме у уборщика мусора есть дополнительный фоновый поток, выполняющий 
пометку объектов во время работы приложения. Когда поток размещает в памя-
ти объект, вызывающий превышение порога для поколения 0, уборщик сначала 
приостанавливает все потоки, а затем определяет поколения, в которых нужно 
выполнить уборку мусора. Если уборщик должен собрать мусор в поколении 0 
или 1, он работает как обычно, но если нужно собрать мусор в поколении 2, раз-
мер поколения 0 увеличивается выше порогового, чтобы разместить новый объект, 
а затем исполнение потоков приложения возобновляется.
Пока работают потоки приложения, отдельный поток уборщика с нормальным 
приоритетом находит все недоступные объекты в фоновом режиме. После того 
как объекты будут обнаружены, уборщик приостанавливает все потоки и решает, 
нужно ли дефрагментировать память. Если он принимает положительное решение, 
память дефрагментируется, ссылки корней исправляются, а исполнение потоков 
приложения возобновляется — такая уборка мусора обычно проходит быстрее, 
так как перечень недоступных объектов создается заранее. Однако уборщик мо-
жет отказаться от дефрагментации памяти, что, на самом деле, предпочтительнее. 
Если свободной памяти много, уборщик не станет дефрагментировать кучу — это 
повышает быстродействие, но увеличивает рабочий набор приложения. Прибегая 
к параллельной уборке мусора, приложение обычно расходует больше памяти, чем 
при непараллельной уборке.
Можно запретить CLR использовать режим параллельной уборки мусора, 
создав конфигурационный файл приложения, содержащий элемент 
gcConcurrent
(см. главы 2 и 3). Вот пример такого файла:





Хотя конфигурация GC-режима не может быть изменена до завершения про-
цесса, приложение может контролировать уборку мусора при помощи свойства 
GCLatencyMode
класса 
GCSettings
. Этому свойству могут присваиваться любые 
значения из перечисления 
GCLatencyMode
. Варианты перечислены в табл. 21.1.



Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   415   416   417   418   419   420   421   422   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish