Middle
Консепти ҷамъоварии партовҳо дар C# чист?
sobes.tech AI
Ҷавоб аз AI
Ҳоҷатхона йиғувчиси (GC) автоматик равишда хотирани бошқариб, удан программага кўра қўлланилмайдиган объектларни озод қилади. У автоматик режимда ишлайди, бу эса хотирани ажратиш ва бўшашни қўл билан бошқариш заруриятини йўқ қилади, шунингдек, хотира оқибати ва кўрсатгичлар билан боғлиқ хатолар хавфини камайтиради.
Ҳоҷатхона йиғиш жараёни қуйидаги босқичларни ўз ичига олади:
- Белгилаш (Marking): GC қайси объектлар ҳали ҳам ишлатилмоқдалигини аниқлайди. Бу, масалан, глобал ўзгарувчилар ёки ҳозирги тўпламлардан объектлар билан бошланади ва улардан кириш мумкин бўлган барча объектларни белгилайди.
- Кўчириш (Compacting): GC ҳаётда қолган объектларни хотирада ҳаракатлантиради, янги хотира учун бирлаштирилган блокларни бўшашга олиб келади. Бу босқичда ҳам, кўчирилган объектларга кўрсатгичларни янгилайди.
- Тозалаш (Sweeping): GC, ишлатилмаган объектлар томонидан эгалланган хотирани бўшашга олиб келади.
.NETда GC генерционал бўлиб, хотира генерцияларга бўлинади:
- Генерация 0 (Gen 0): Қисқа муддатли объектларни ўз ичига олади. Бу генерациянинг йиғилиши энг кўп учрайди.
- Генерация 1 (Gen 1): Gen 0 йиғилишида ўтган объектлар учун буфер вазифасини бажаради. У Gen 0 га нисбатан камроқ йиғилади.
- Генерация 2 (Gen 2): Узуна муддатли объектларни ўз ичига олади. У энг кам йиғилади ва юқори ишлаш талаб қилади.
Объектлар "ўлдириш" бўйича генерациялар орасида ҳаракатланади.
Масалан, объект яратиш ва уни ишлатиш:
// Объект яратиш
MyObject obj = new MyObject();
// Объектдан фойдаланиш
obj.DoSomething();
// Объектдан фойдаланилмай қолган, GC уни йиғиши мумкин
obj = null;
Зўрлаш билан йиғиш чақириш GC.Collect() ёрдамида амалга оширилиши мумкин, аммо одатда тавсия этилмайди, чунки GC автоматик равишда йиғиш вақтини оптималлаштиради.
// Зўрлаш билан йиғишни амалга ошириш (кўп ҳолларда тавсия этилмайди)
GC.Collect();
GC.WaitForPendingFinalizers(); // Финализаторларни кутмоқ