کنکور کامپیوتر
0
ورود | ثبت نام
نظرات
اشتراک
بالا
علاقه‌مندی

اشتراک
 

مدیریت حافظه در زبان سی شارپ

در این صفحه عالی به آموزش نحوه مدیریت حافظه در زبان سی شارپ پرداخته و عملکرد و الگوریتم های Garbage Collection و مزایای Garbage Collection در سی شارپ را گفته

مدیریت حافظهمدیریت حافظه در برنامه نویسی ⚡️ سه سطح مهم در مدیریت حافظهمدیریت حافظه در برنامه نویسی ⚡️ سه سطح مهم در مدیریت حافظهاین مقاله عالی سه سطح مهم در مدیریت حافظه یعنی مدیریت حافظه در سطح سخت‌افزار، مدیریت حافظه در سطح سیستم عامل و مدیریت حافظه در سطح برنامه را معرفی کرده یکی‌ از بخش‌های مهم در هر زبان برنامه نویسیزبان های برنامه نویسی چیست؟زبان های برنامه نویسی چیست؟این مقاله عالی توضیح داده که زبان های برنامه نویسی چیست؟ و انواع زبان های برنامه نویسی و بهترین زبان برنامه نویسی برای شروع و پردرآمدترین آنها را معرفی کرده است. زبان برنامه نویسیبرنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟برنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟در عصر فعلی برنامه‌نویسی یکی از پرطرفدارترین شغل‌های دنیاست، دغدغه‌‌ای افرادی که می‌خواهند در مسیر برنامه‌نویس شدن قدم بردارند این است که نمی‌دانند از کجا باید شروع کنند، در این صفحه هر آن چه برای تبدیل شدن به یک برنامه نویس حرفه ای نیاز دارید در اختیارتان قرار گرفته است سی شارپسی شارپ چیست ⚡️سی شارپ به زبان سادهسی شارپ چیست ⚡️سی شارپ به زبان سادهاین صفحه عالی بررسی کرده که سی شارپ چیست و تاریخچه سی شارپ، محیط و ابزارهای سی شارپ، ویژگی های سی شارپ، مزایای سی شارپ و کاربرد و بازار کار سی شارپ را گفته نیز مستثنی از این قضیه نیست. مدیریت‌کردن حافظه یک امر مهم از لحاظ پرفورمنس‌ و‌ کارایی هر‌ برنامه‌ کامپیوتری است. مدیریت حافظه بهینه این اطمینان‌ را می‌دهد‌ که برنامه‌ ما از منابعی‌ که دراختیار دارد، به‌ طور کارآمد استفاده می‌کند و از هرگونه نشتی حافظه (Memory Leak) یا کندشدن برنامه و همچنین خطای Out of Memory جلوگیری می‌شود. در زبان برنامه نویسی سی شارپ، عملیات مدیریت حافظه برعهده‌ سیستمی با نام Garbage CollectionGarbage Collection(GC) چیست و چگونه کار میکند؟Garbage Collection(GC) چیست و چگونه کار میکند؟این مقاله عالی بررسی کرده که Garbage Collection(GC) چیست و چگونه کار میکند؟ و مزایای Garbage Collection و انواع روش های Garbage Collection را معرفی کرده یا زباله روب است که‌به‌ طور خودکار، حافظهحافظه در کامپیوتر، همه چیز در مورد حافظه در معماری کامپیوترحافظه در کامپیوتر، همه چیز در مورد حافظه در معماری کامپیوتردر این مقاله به بررسی کامل حافظه در کامپیوتر، انواع حافظه در کامپیوتر، کش، روش‌های آدرس دهی کش، نگاشت آدرس و موارد دیگر می‌پردازیم را مدیریت می‌کند. این‌ کار باعث می‌شود تا توسعه‌دهندگان تمامی تمرکزشان بر روی نوشتن کدها باشد، بدون این‌ که نگران مدیریت‌کردن حافظه به‌ صورت دستی باشند. برخلاف زبان‌هایی مانند سی پلاس پلاسبرنامه نویسی سی پلاس پلاس چیست؟ مزایای برنامه نویسی C++‎؟برنامه نویسی سی پلاس پلاس چیست؟ مزایای برنامه نویسی C++‎؟برنامه نویسی سی پلاس پلاس چیست و چه کاربردی دارد؟ این صفحه عالی به بررسی مزایای برنامه نویسی C++ پرداخته و نمونه هایی از کدهای زبان برنامه نویسی ++C را آورده که‌ در‌ آن عملیات مدیریت حافظه به‌ صورت دستی انجام می‌شود، زبان‌هایی مانند جاواجاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا یک زبان برنامه نویسی همه منظوره، مبتنی بر کلاس و شی گرا است که برای داشتن وابستگی های پیاده سازی کمتر طراحی شده است، زبان برنامه نویسی جاوا شبیه ++C است، سی شارپ و پایتونزبان برنامه نویسی پایتون چیست؟ – نحوه شروع و دلایل محبوبیتزبان برنامه نویسی پایتون چیست؟ – نحوه شروع و دلایل محبوبیتزبان برنامه نویسی پایتون (Python) چیست؟ این مقاله عالی به بررسی دلایل محبوبیت پایتون، موارد استفاده از پایتون و نحوه شروع به برنامه نویسی پایتون پرداخته، نیازی‌ به مدیریت دستی حافظه ندارند و تمامی کارها به‌ صورت خودکار انجام می‌شود.

از آن‌ جایی‌که مدیریت حافظه در زبان سی شارپ برعهده‌ی Garbage Collector است، تمرکز اصلی ما دراین مقاله بر روی تکنیک‌ها و عملکرد این سیستم می‌باشد. اما قبل‌ از واردشدن به‌بحث مدیریت حافظه، نیاز است تا با دو مورد از ساختمان دادهآموزش ساختمان داده و الگوریتمآموزش ساختمان داده و الگوریتمهر ساختمان داده یک نوع فرمت ذخیره‌سازی و مدیریت داده‌ها در کامپیوتر است، که امکان دسترسی و اصلاح کارآمد آن داده‌ها را برای یکسری از الگوریتم‌ها و کاربردها فراهم می‌کند، در این صفحه به بررسی و آموزش ساختمان داده و الگوریتم پرداخته شده است‌ای که‌ در حافظه‌ برنامه‌های سی شارپ استفاده می‌شود یعنی پشتهساختمان داده پشته ⚡️ پشته چیست؟ کاربرد پشته در ساختمان دادهساختمان داده پشته ⚡️ پشته چیست؟ کاربرد پشته در ساختمان دادهاین مقاله عالی توضیح داده که پشته چیست و کاربرد پشته در ساختمان داده چیست، همچنین نحوه کارکرد پشته، پیاده سازی پشته و عملیات های پشته را معرفی کرده (Stack) و هیپدرخت هیپ (heap) چیست؟ آموزش هیپ در ساختمان دادهدرخت هیپ (heap) چیست؟ آموزش هیپ در ساختمان دادهاین صفحه عالی به آموزش هیپ (heap) در ساختمان داده پرداخته و اعمالی که در هرم قابل انجام است و مزایا و معایب حافظه Heap و مثال کدنویسی از Heap را آورده (Heap) آشنا شوید.

تخصیص و عدم تخصیص حافظه

همان‌طور‌که گفته شد دو ساختمان‌داده‌ پشته و هیپ برای تخصیص داده‌ها استفاده می‌شود.

پشته در مقابل هیپ

حافظه‌ پشته برای ذخیره‌ انواع مقداری یا Value Typeها مورد استفاده قرار می‌گیرد. انواع مقداری مانند پارامترهای یک متد و متغیر متغیر در برنامه نویسی چیست ⚡️انواع متغیر در برنامه نویسیمتغیر در برنامه نویسی چیست ⚡️انواع متغیر در برنامه نویسیاین صفحه عالی بررسی کرده متغیر در برنامه نویسی چیست و انواع متغیر در برنامه نویسی را معرفی و مراحل کار با متغیر، نحوه تعریف و قوانین نام‌گذاری متغیرها را گفته های محلی همانند int, float, decimal, double و یا ارجاعاتی‌ که از هیپ به‌ آن داده می‌شود است. درحالی‌که از حافظه‌ هیپ برای ذخیره‌ انواع ارجاعی یا Reference Typeها استفاده می‌شود. انواع ارجاعی مثل آبجکت‌های ایجاد‌ شده از کلاس‌ها و یا آرایهآموزش آرایه در ساختمان داده به زبان ساده و از 0 تا 100آموزش آرایه در ساختمان داده به زبان ساده و از 0 تا 100در این مقاله موارد زیر بررسی شده است : 1- آرایه چیست 2- انواع اندیس گذاری در آرایه 3- انواع آرایه 4- محاسبه آدرس در آرایه 5- محاسبه شماره در آرایه 6- آرایه در برنامه نویسی 7- مزایای استفاده از آرایه ها؛ به‌طور خاص Garbage Collector مسئول مدیریت حافظه‌ هیپ است.

پشته در مقابل هیپ در سی شارپ

درکد زیر، چند‌نمونه‌ از مثال‌های ذخیره‌ در حافظه‌ پشته و هیپ را مشاهده می‌کنید:

int a = 42; // نوع مقداری 
int b = a; // ایجاد کپی از یک نوع مقداری
b = 13; // مقدار a تغییری نمی‌کند
 
MyClass objA = new MyClass(); // نوع ارجاع
MyClass objB = objA; // ایجاد یک ارجاع جدید به آبجکت قدیمی
objB.SomeProperty = 7; // تغییرات دو هر دو آبجکت objA و objB تاثیر می‌گذارد

دوره برنامه نویسی سی شارپ

C# یک زبان برنامه‌نویسی سطح بالا، ساده، پیشرفته، محبوب، پرکاربرد، بروز و زیبای دنیای کامپیوتر است. این زبان در ایران و سایر کشورهای جهان بازار کار قابل‌توجهی دارد و جزء 5 زبان برتر و پول‌ساز دنیا می‌باشد. در این دوره عالی شما بطور کامل و با زبانی ساده سی شارپ را یاد خواهید گرفت.

چه چیزهایی در این دوره یاد می‌گیرید

برنامه‌نویسی گام‌به‌گام با زبان C#
استفاده از محیط برنامه‌نویسی Visual Studio .NET 2022
برنامه‌نویسی در محیط کنسول
برنامه‌نویسی در محیط گرافیکی
اصول برنامه‌نویسی به زبان C#
استفاده از کتابخانه .NET

نمونه فیلم‌هایی از جلسات برنامه نویسی سی شارپ

خوش‌ آمد گویی و آشنایی با C#

نصب Visual Studio .NET

آشنایی با Console Application

آشنایی با Windows Form Application

متغیرها - اعداد اعشاری و ممیز شناور

دستورهای while & do while

اصلاح خطا حین اجرا

انتقال پارامترها به توابع

مدیریت حافظه

اعداد تصادفی در .NET

خوش‌ آمد گویی و آشنایی با C#
نصب Visual Studio .NET
آشنایی با Console Application
آشنایی با Windows Form Application
متغیرها - اعداد اعشاری و ممیز شناور
دستورهای while & do while
اصلاح خطا حین اجرا
انتقال پارامترها به توابع
مدیریت حافظه
اعداد تصادفی در .NET

عملکرد Garbage Collection

سیستم Garbage Collector بخشی از فریم‌ ورک NET. است که‌ مسئول تخصیص حافظه به‌ برنامه‌های NET. است و توسط CLR یا Common Language Runtime شرکت مایکروسافت مدیریت می‌شود. برنامه‌ نویسان C#سی شارپ چیست ⚡️سی شارپ به زبان سادهسی شارپ چیست ⚡️سی شارپ به زبان سادهاین صفحه عالی بررسی کرده که سی شارپ چیست و تاریخچه سی شارپ، محیط و ابزارهای سی شارپ، ویژگی های سی شارپ، مزایای سی شارپ و کاربرد و بازار کار سی شارپ را گفته هیچ‌ وقت نیازی ندارند تاعملیات تخصیص و عدم تخصیص حافظه‌ را به‌ صورت دستی انجام دهند؛ بنابراین هیچ کلمه‌ کلیدی‌ مثل Delete برای حذف آبجکت‌ها وجود ندارد و تمامی این موارد به Garbage Collector سپرده شده است.

هدف اصلی Garbage Collector، پاک‌کردن داده‌هایی از حافظه‌ Heap است که‌مدت‌هاست ازآن استفاده نشده و درواقع قابل دسترس (Reachable) نیستند. این‌ که کدام آبجکت باید حذف شود به‌ وسیله‌ یک‌ سری الگوریتمالگوریتم چیست به زبان ساده و با مثال های فراوانالگوریتم چیست به زبان ساده و با مثال های فراواندر این مقاله به زبان بسیار ساده و با مثال های متعدد توضیح داده شده که الگوریتم چیست و چه کاربردهایی دارد هایی‌که جلوتر معرفی می‌کنیم مشخص می‌شوند.

الگوریتم های Garbage Collection

الگوریتم‌ های زیادی توسط Garbage Collection استفاده می‌شود که‌ در این قسمت می‌خواهیم به‌ چهار الگوریتم اصلی آن بپردازیم:

  1. الگوریتم Mark و Sweep
  2. الگوریتم Copying
  3. الگوریتم Generational
  4. الگوریتم Compaction

الگوریتم Mark و Sweep

این الگوریتم همان‌طور‌ که از نامش پیداست ازدو فاز نشانه‌گذاری (Mark) و جاروکردن (Sweep) ساخته شده است.

درتصویر زیر، فاز بعد از اجرای الگوریتم زباله‌ روبی را مشاهده می‌کنید:

حذف اشیاء غیرقابل دسترسی (Unreachable)

الگوریتم Copying

این الگوریتم حافظه‌ را به‌ دوقسمت مساوی تقسیم می‌کند. وقتی یک شئ‌ یا‌ آبجکت ازکلاسی ایجاد و به‌ آن مقداری تخصیص‌ داده شد، آن آبجکت در نیمه‌ اول حافظه قرار می‌گیرد. وقتی Garbage Collection شروع‌ به‌ کار کرد، آبجکت‌هایی‌ که Reachable هستند به‌ نیمه‌ دوم حافظه‌ نصف‌شده کپی می‌شوند و هرچه در نیمه‌ اول حافظه باقی ماند پاک می‌شود.

الگوریتم Generational

شاید بتوان گفت از مهم‌ترین الگوریتمی‌ که در Garbage Collection وجود دارد، این الگوریتم است. برای رسیدن‌ به کارایی بالاتر جهت آزادسازی حافظه، حافظه‌ هیپ به‌ قسمت‌هایی به نام "نسل‌ها" یا Generations تقسیم می‌شود. به‌طورکلی 3 نسل وجود دارد، نسل 0، نسل 1 و نسل 2؛ ایده‌ نسل‌بندی در واقع بسیارساده است: هرچه آبجکت موجود درحافظه‌ هیپ بیشتر دردسترس باشد، وارد نسل‌های بالاتری می‌شود. آبجکت‌هایی‌ که اخیرا وارد هیپ شده‌اند در دور بعدی زباله‌ روبی Unreachable درنظر گرفته می‌شوند. این الگوریتم از مراحل زیر تشکیل شده است:

  1. وقتی آبجکتی ساخته شد، در نسل 0 یا Gen 0 قرار می‌گیرد.
  2. وقتی Gen 0 پرشد، GC عملیات زباله‌ روبی‌ را اجرا می‌کند. درحین اجرای عملیات، تمامی آبجکت‌های Unreachable دراین قسمت، از حافظه‌ هیپ پاک می‌شوند و تمامی آبجکت‌های دردسترس به‌ یک‌ نسل بالاتر ترفیع پیدا می‌کنند؛ یعنی وارد Gen 1 می‌شوند. عملیات مربوط‌ به Gen 0 به‌طور سریعی انجام می‌شود.
  3. وقتی Gen 1 پرشد، عملیات زباله‌ روبی مربوط‌ به Gen 1 اجرا می‌شود. همانند Gen 1، تمامی آبجکت‌های دردسترس به Gen 2 ترفیع پیدا می‌کنند و عملیات Gen 0 مجدداً شروع می‌شود.
  4. وقتی Gen 2 پرشد، GC عملیات مربوط‌ به تمامی نسل‌ها را اجرا می‌کند (Full Garbage Collection). ابتدا عملیات مربوط‌ به Gen 2 انجام می‌شود و سپس عملیات Gen 1 و Gen 0؛ بنابراین دراین قسمت تمامی آبجکت‌های Reachable زنده می‌مانند و Unreachable‌ها حذف می‌شوند. اگر با انجام این‌کار، همچنان حافظه‌ کافی برای تخصیص‌های جدید وجود نداشت، GC یک استثنا ازنوع OutOfMemory برمی‌گرداند. درتصویر زیر این مراحل‌ را مشاهده می‌کنید:

الگوریتم Generational در هیپ

الگوریتم Compaction

قبل‌از این‌ که به‌ بررسی این الگوریتم بپردازیم، ابتدا باید مفهوم قطعه‌ قطعه شدن یا Fragmentation را بدانیم.

Fragmentation چیست؟

درطول عملیات تخصیص و عدم تخصیص یا آزادسازی حافظه، قسمت‌هایی‌ از حافظه با اندازه‌های مختلف خالی می‌ماند، درواقع این امر به‌ دلیل وجود فرآیندها و آبجکت‌هایی با سایزهای مختلف اتفاق می‌افتد. ازآن‌جایی‌ که اولین حافظه‌ خالی به آبجکت یا فرآیندی تخصیص می‌یابد، درنتیجه بعداز تخصیص و آزادسازی حافظه در طول زمان، قسمت‌های ناپیوسته‌ خالی درحافظه به‌ وجود می‌آید که‌ امکان تخصیص دادن آن‌ها میسر نیست. به‌ این پدیده قطعه قطعه شدن یا Fragmentation می‌گویند. درحین اجرای عملیات Garbage Collection در سی شارپ، علاوه‌ بر فاز Mark و Sweep، یک‌ فاز دیگری با نام Compaction انجام می‌شود. این فاز بعد از دوفاز قبل اجرا می‌شود و به‌ این‌ صورت است‌ که قسمت‌های تخصیص داده‌شده‌ را درکنارهم قرار می‌دهد؛ بنابراین حافظه‌های خالی به‌ صورت پیوسته درکنار همدیگر قرار می‌گیرند و امکان تخصیص آن‌ها وجود خواهد داشت.

حافظه قبل و بعد از اجرای الگوریتم فشرده سازی

اجرای Garbage Collection به صورت دستی

در زبان سی شارپ، Garbage Collector درزمان‌های تعیین نشده به‌ صورت غیرقطعی یا Non-Deterministic عملیات زباله‌ روبی‌ را اجرا می‌کند؛ به‌ این معنی که‌ در زمان‌های معین نشده، GC اجرا می‌شود و شروع‌ به Collect کردن آبجکت‌های زباله می‌کند. زمان‌های اجرا شدن GC مشخص نیست و برنامه‌ نویس‌ هم نمی‌تواند زمان آن‌ را تعیین کند.

اگرچه زمان اجرا شدن Garbage Collection مشخص نیست، اما برنامه‌ نویسان می‌توانند Garbage Collector را مجبوربه اجرای عملیات کنند. این‌کار به‌ وسیله‌ عبارت ( )GC.Collect انجام می‌شود؛ همچنین این متد به‌ شما این اجازه‌ را می‌دهد تا نسلی‌ را که‌ می‌خواهید عملیات روی آن انجام شود، مشخص کنید. به‌عنوان مثال اگر بخواهید عملیات‌ را بر روی نسل 0 یا Gen 0 اجرا کنید، می‌نویسید:

GC.Collect(0);

این کد عملیات GC را برروی جوان ترین نسل اجرا می‌کند. حال اگر بخواهید عملیات زباله‌ روبی را بر روی پیرترین یا Old ترین نسل یعنی نسل 2 اجرا کنید، باید بنویسید:

GC.Collect(2);

درصورتی‌ که بخواهید عملیات زباله‌ روبی‌ را بدون درنظر گرفتن نسل، برروی تمامی آبجکت‌ها انجام دهید، کافی‌است هیچ‌عددی‌ را به‌عنوان پارامتر مشخص نکنید؛ مانند کد زیر:

GC.Collect();

به‌صورت کلی پیشنهاد می‌شود که‌از ( )GC.Collect استفاده نکنید؛ زیرا باعث ایجاد مشکلاتی‌ در پرفورمنس برنامه می‌شود. Garbage Collector طوری طراحی شده است که‌ به‌ صورت خودکار و درزمان Non-Deterministic وظایفش‌ را انجام دهد؛ بنابراین بهترین رویکرد این است که‌ در کار GC مداخله نکنیم و بگذاریم کارش‌ را انجام دهد.

مزایای Garbage Collection در سی شارپ

همان‌طورکه دراول مقاله گفته شد، مهم‌ترین بخش مدیریت حافظه در سی شارپ به‌وسیله‌ سیستم Garbage Collection انجام می‌شود. لیستی‌ از مهم‌ترین مزایای این سیستم به‌ طور خلاصه درزیر جمع‌آوری شده است:

نمونه فیلم‌های دوره‌های مهارتی

جمع‌بندی

یکی‌ از مهم‌ترین قسمت‌های برنامه‌ نویسی و اجرای برنامه‌های کامپیوتری، مدیریت کردن حافظه آن‌هاست. زبان‌های مختلفی وجود دارند‌ که رویکرد مدیریت کردن حافظه درآن‌ها به‌ شیوه‌های مختلفی صورت می‌پذیرد. هرچند که سیستم Garbage Collection سیستمی است که‌ در اکثر زبان‌ های برنامه‌ نویسی به‌ نحو متفاوتی پیاده‌سازی شده است و از قدمت بالایی برخوردار است. دربسیاری‌ از زبان‌ های برنامه‌ نویسی سطح بالا، نیازی‌ به مدیریت کردن حافظه به‌ صورت دستی وجود ندارد. البته می‌توان به‌ صورت دستی نیز تخصیص و عدم تخصیص حافظه‌ را انجام داد؛ اما پیشنهاد سازندگان این سیستم این است که‌ تا جای ممکن از انجام دستی مدیریت حافظه درزبان‌هایی مثل سی شارپ و جاوا خودداری شود. دراین مقاله به‌ بررسی سیستم مدیریت حافظه در سی شارپ و الگوریتم‌های معروف مدیریت حافظه پرداختیم و دیدیم که چگونه Garbage Collection از انواع تکنیک‌ها استفاده می‌کند تا مدیریت حافظه‌ را به‌ نحو احسن انجام دهد.

مدیریت حافظه در سی شارپ چیست؟

به‌ عملیات تخصیص و عدم تخصیص حافظه به‌ آبجکت‌های ایجادشده در سی شارپ که‌به‌ وسیله‌ سیستم Garbage Collection و به‌ صورت خودکار انجام می‌شود، مدیریت حافظه می‌گویند.

آیا عملیات Garbage Collection به دست برنامه نویس انجام می شود؟

هرچند که برنامه‌ نویس می‌تواند در اکثر کارهای Garbage Collection مداخله کند، اما هیچ‌ نیازی به‌انجام کارها به‌ صورت دستی وجود ندارد و Garbage Collection به‌ صورت خودکار تمامی عملیات مدیریت حافظه را کنترل می‌کند.

دوره‌های مهارتی رشته کامپیوتر

امتیازدهی5 1 1 1 1 1 1 1 1 1 15.00 امتیاز (3 رای)
اشتراک
بارگذاری نظرات
تلگرام اینستاگرام