რესურსების სისუფთავის ფაზები მეხსიერების მართვაში?
sobes.tech AI
პასუხი AI-სგან
.NET-ში მეხსიერების მართვა მოიცავს შემდეგ რესურსების სისუფთავის ფაზებს:
-
მარკირების ფაზა (Marking): გარეჯის აგროვებელი განსაზღვრავს, რომელი ობიექტები არის ხელმისაწვდომი ძირეულ ობიექტებიდან (სტეკის ცვლადები, სტატიკური ცვლადები და რეგისტრები). მიუწვდომელი ობიექტები მონიშნულია შეგროვებისთვის.
-
ადგილმდებარეობის ფაზა (Relocating/Compacting): ხელმისაწვდომი ობიექტები იწონიან (კომპაქტდება) მეხსიერებაში, გამოყოფენ თანმიმდევრულ სივრცეს და ამცირებენ ფრაგმენტაციას. ამ პროცესში განახლდება გადასატანი ობიექტების მაჩვენებლები. ეს ფაზა მხოლოდ ფონურ რეჟიმს არ განეკუთვნება.
-
სუფთავების ფაზა (Sweeping): მონიშნული ობიექტების
Finalizeმეთოდები იძახება, თუ ისინი განსაზღვრულია. შემდეგ, ამ ობიექტების დაკავებული მეხსიერება თავისუფლდება.
Finalize-ის გამოყენების მაგალითი (არასასურველია, უკეთესია გამოიყენოთ IDisposable):
public class ResourceHolder
{
// რესურსი, რომელიც საჭიროებს გათავისუფლებას
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// ფინალიზაციის მეთოდი, რომელიც იძახება გარეჯის აგროვებლით
~ResourceHolder()
{
// unmanaged რესურსის გათავისუფლება
_writer?.Dispose();
}
// სხვა მეთოდები...
}