
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
آشنایی با زباله روبی(Garbage Collection) ASP.Net Core
زباله روبی(Garbage Collection) ASP.Net Core
در این بخش به مفهوم زباله روبی که یکی از مهمترین امکانات پلتفرم .NET است می پردازیم. زباله روبی (GC) تخصیص و آزادسازی حافظه را مدیریت می کند. این قابلیت نقش یک مدیر خودکار حافظه را ایفا می کند.
- نیازی به دانستن چگونگی تخصیص و آزادسازی حافظه یا مدیریت عمر اشیائی که از این حافظه استفاده می کنند، ندارید.
- هر زمان که شئ را به کمک واژه ی کلیدی “new” اعلان کنید و یا زمانی که مقداری عددی کادر بندی شود، کار تخصیص انجام می شود. این کار معمولا با سرعت بالایی انجام می شود.
- زمانی که حافظه ی کافی جهت تخصیص یک شیء وجود نداشته باشد، در این صورت زباله روب باید حافظه ی اضافی را جمع آوری کند و دور بیاندازد تا بتوان برای تخصیص های جدید فضا ایجاد کرد.
- به این فرآیند زباله روبی گفته می شود.
مزایای زباله روبی
زباله روبی مزایای زیر را به همراه دارد:
- هنگام برنامه نویسی نیازی به آزاد کردن حافظه به صورت دستی وجود ندارد.
- با کمک این قابلیت می توان اشیاء را به هرم های مدیریت شده تخصیص داد.
- بعد از آن که اشیاء دیگر کاربردی نداشته باشند، در این صورت این قابلیت این اشیاء را با پاک کردن حافظه ی آن ها، پس می گیرد و حافظه ی موجود را برای انجام تخصیص در آینده نگهداری می کند.
- اشیاء مدیریت شده به صورت خودکار برای شروع کار خود، محتوای پاک را دریافت می کنند. به همین دلیل سازنده های آن ها مجبور به مقداردهی اولیه ی فیلدهای هر یک از داده ها نیستند.
- همچنین این قابلیت با تضمین این مطلب که یک شیء نمی تواند محتوای شیء دیگری را استفاده کند، امنیت حافظه را افزایش می دهد.
شرایط زباله روبی
زباله روبی زمانی رخ می دهد که یکی از شرایط زیر صدق کند:
- حافظه ی فیزیکی سیستم کم باشد.
- حافظه ای که توسط اشیاء تخصیص داده شده در هرم های مدیریت شده استفاده می شود، از حد مجاز بیشتر شود. این حد با پیشرفت کار اصلاح می شود.
- متد GC.Collect فراخوانی می شود و تقریبا در تمامی موارد شما مجبور به فراخوانی آن نیستید. چرا که زباله روب به صورت پیوسته در حال کار است. این متد بیشتر در حالت های خاص و جهت آزمایش کاربرد دارد.
نسل ها
زباله روب .NET سه نسل دارد که هر یک از آن ها هرم مخصوص به خود را دارد، به گونه ای که این هرم ها در ذخیره سازی اشیاء تخصیص داده شده کاربرد دارند.
نسل اول (0)
- در نسل 0 اشیاء در ابتدا تخصیص داده می شوند.
- در این نسل عمر اشیاء اغلب به بعد از این نسل نمی رسد. چرا که بعد از شروع کار زباله روبی این اشیاء دیگر کاربردی نخواهند داشت (خارج از دامنه هستند).
- روبش این نسل سریع است، زیرا هرم مربوط به آن کوچک است.
نسل دوم (1)
- اشیاء این نسل یک فضای تصادفی ثانویه دارند.
- این اشیاء عمر کوتاهی دارند. با این حال از زباله روبی نسل 0 (اغلب بر اساس زمان بندی تصادفی) جان سالم به در می برند و به نسل 1 می رسند.
- روبش این نسل نیز سریع انجام می شود، چرا که باز هم هرم آن کوچک است.
- دو هرم اول کوچک باقی می مانند، زیرا اشیاء یا جمع آوری می شوند و یا اینکه به هرم نسل بعد می رسند.
نسل سوم (2)
- تمامی اشیاء با عمر زیاد در این نسل هستند و هرم آن ها می تواند بسیار بزرگ باشد.
- اشیاء این نسل می توانند عمر طولانی داشته باشند و دیگر خبری از هرم در نسل دیگری نیست که این اشیاء به آن منتقل شوند.
- زباله روب برای اشیاء بزرگ یک هرم اضافی دارد که اسم آن «هرم اشیاء بزرگ (LOH)» است.
- این هرم برای اشیاء با اندازه ی بزرگتر یا مساوی 85000 بایت در نظر گرفته شده است.
- اشیاء بزرگ به هرم های نسلی تخصیص داده نمی شوند، بلکه مستقیما به این LOH تخصیص داده می شوند.
- روبش های LOH و نسل 2 ممکن است زمان زیادی را از برنامه هایی بگیرند که مجبورند به مدت طولانی فعال باشند، یا بر روی حجم زیادی از اطلاعات کار کنند.
- هرم برنامه های سروری بزرگ معمولا به ده ها گیگابایت می رسد.
- زباله روب جهت کاهش زمان مسدود سازی اجرای برنامه از تکنیک های متنوعی بهره می گیرد.
- رویکرد اصلی آن این است که کار زباله روبی را تا حد امکان در یک رشته ی پس زمینه انجام دهد، به گونه ای که خللی در اجرای برنامه وارد نشود.
- همچنین برنامه نویسان می توانند جهت کنترل رفتار این زباله روب ها راه هایی را بیابند تا بتوانند عملکرد آن ها را بهبود دهند.