مشخصات مقاله
مدیریت حافظه -Garbage Collection در NET.
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.
Garbage Collection در .NET 4.5
در این مقاله سعی می کنیم ویژگی جدیدی را در .NET 4.5 معرفی کنیم تا بتوانید به راحتی از آن استفاده کنید. اجازه بدهید ببینیم MSDN در این باره چه می گوید:
"وظیفه garbage collector در .NET Framework، تخصیص و آزادسازی حافظه برای برنامه است. موتور بهینه ساز garbage collector، بر اساس تخصیص های (allocation) انجام شده، بهترین زمان را برای آزادسازی انتخاب می کند. هنگام جمع آوری (collection)، بررسی می شود که آیا اشیاء موجود در حافظه ی هیپ مدیریت شده، توسط برنامه استفاده می شوند یا خیر؟ و بعد عملیات لازم برای آزاد سازی و برگرداندن حافظه را انجام میدهد."
حتماً باید راجع به کدهای مدیریت شده و مدیریت نشده شنیده باشید. کدهای مدیریت شده مربوط می شود به مدیریت خودکار حافظه توسط Garbage Collection که به آن GC نیز می گویند.
GC در .NET پردازش سنگینی داشت و در .NET 4.5 بهبود یافت. در این بهبود سعی شده است مقادیری را در اختیار توسعه دهندگانی که برنامه های بزرگ و کوچک client و server تولید می کنند، قرار می دهد.
Garbage Collection از زمان .NET 4.0
در نسخه های قدیمی تر .NET، GC با مسائل زیادی مواجه بود. هر چه برنامه بزرگتر بود، منابعی که مصرف می کرد بیشتر بود. برنامه های ASP.NET بر روی سرور اجرا می شدند و clientهای زیادی، درخواست هایشان را به سرور ارسال می کردند. در نتیجه اشیاء زیادی ساخته می شد و GC به سختی اشیاء ناخواسته را پاک می کرد. به همین دلیل وقفه بزرگی در برنامه بوجود می آمد که کارایی آن را پایین می آورد و اشیاء بزرگتر در heap فضای بیشتری اشغال می کردند.
برای روشن تر شدن موضوع، نسخه های قدیمی تر .NET مثل .NET 4.0
زمانی که threadهای مختلف با کدهای مدیریت شده، در حال انجام کارهایشان هستند، اجرای GC یک وقفه در برنامه ایجاد می کند و تمام threadهای برنامه به حالت تعلیق در می آیند و به این ترتیب، سرور کمتر جوابگو خواهد بود.
چه چیزی درباره GC در .NET 4.5 جدید است؟
.NET 4.5 با معرفی GC server، بر این مشکل غلبه کرد. به این شکل که یک thread اضافی در پس زمینه، اشیاء را پاک میکند. با این کار نسل دوم اشیاء کنترل شده و حجم کار در thread اصلی GC کم می شود. اجرای همزمان دو thread به صورت همزمان، زمان تعلیق را کاهش می دهد و باعث بهبود توان نرم افزار می شود.
فعالسازی GC server
با استفاده از تگ GCServer در XML در فایل web.config، می توانید GC server را فعال کنید.