جمعآوری زباله (GC) یک سیستم مدیریت حافظه خودکار در .NET است که وظیفه تخصیص حافظه برای اشیاء جدید، ردیابی اشیاء مورد استفاده و آزاد کردن حافظه برای اشیاء غیرضروری را بر عهده دارد. هدف اصلی GC جلوگیری از نشت حافظه و کاهش خطاها در توسعهدهندگان مانند اشارهگرهای معلق است. این سیستم به حفظ سلامت برنامه کمک میکند.
.NET GC از الگوریتم نسلبندی، علامتگذاری و فشردهسازی استفاده میکند. اشیاء بر اساس طول عمرشان در نسلهای مختلف (Gen 0، Gen 1، Gen 2) گروهبندی میشوند. نسل 0 برای اشیاء جدید و جمعآوری مکرر، نسل 1 برای اشیاء با طول عمر متوسط و نسل 2 برای اشیاء با طول عمر طولانی و اشیاء بزرگ استفاده میشود.
در فاز علامتگذاری، GC برنامه را به طور خلاصه متوقف میکند و تمام اشیاء قابل دسترس را علامتگذاری میکند. اشیاء قابل دسترس شامل متغیرهای محلی، مراجع استاتیک و اشیاء ارجاع داده شده توسط سایر اشیاء هستند. پس از علامتگذاری، GC حافظه را با جابجایی اشیاء زنده به هم نزدیکتر فشرده میکند تا از تکه تکه شدن حافظه جلوگیری شود و عملکرد بهبود یابد.
اشیاء بزرگتر از 85 کیلوبایت به تجمعی بزرگ اشیاء (LOH) منتقل میشوند که به ندرت فشرده میشوند. توصیه میشود از تخصیصهای بزرگ غیرضروری خودداری کنید، زیرا LOH میتواند باعث تکه تکه شدن حافظه شود. استفاده از دستور GC.Collect() به طور معمول توصیه نمیشود، زیرا میتواند باعث توقف برنامه و کاهش عملکرد شود.
بهترین روشها شامل استفاده از دستورات using برای اشیاء قابل دور ریختن، اجتناب از تخصیصهای بزرگ غیرضروری، استفاده از Span و Memory برای سناریوهای با کارایی بالا و اجتناب از مراجع طولانی مدت است. در سناریوهای دنیای واقعی، GC به طور موثر با درخواستهای زیاد در یک API وب و مدیریت آرایههای بایت بزرگ در پردازش تصویر مقابله میکند.
مشاهده مطلب اصلی