محمد باقری نسب
دوشنبه 18 مهر 1390, 08:38 صبح
بحثی که در این مقاله قراره بهش بپردازم، شاید کابوسی برای برنامه نویسان دات نت باشه! چون بدون شک اکثر برنامه نویسان دات نت با مشکل مدیریت حافظه در برنامه هاشون مواجه هستن و یا در آینده قطعا باهاش مواجه خواهند شد. اما آیا راهکاری برای حل این مشکل وجود داره؟ در ادامه با من همراه باشید.
مسئله
سوالی که در ابتدا به ذهن هر برنامه نویسی خطور میکنه اینه که چرا در دات نت نمیشه حافظه رو به طور کامل آزاد کرد؟ نکته اینجاست که سیستم نظارت بر حافظه در دات نت مدیریت شده هست (Managed) برای همین به برنامه نویس اجازه داده نمیشه که خودش در مورد وضعیت حافظه اشغال شده توسط برنامه، تصمیم بگیره!
مشکل
تا اینجا که همه چیز به نظر خوبه؛ یه سیستمی هست که زحمت مدیریت فضای اشغال شده در حافظه رو خودش میکشه و ما مجبور نیستیم به صورت دستی این کارو انجام بدیم، دمشم گرم!
ولی خبر بد اینکه متاسفانه سیستم مدیریت حافظه دات نت در اکثر مواقع این کارو به درستی انجام نمیده و با وجود کلاسی به نام GC که به برنامه نویس این اجازه رو میده تا اشیاء غیر قابل استفاده رو از توی حافظه پاک کنه، متاسفانه طبق تجربه، این کلاس هم تاثیر خاصی روی وضعیت حافظه نداره و ظاهرا درست عمل نمیکنه.
راهکار
نهایتا بنده خودم با یکی از دوستان برنامه نویس دست به کار شدیم تا شاید راهی برای این مشکل توی دات نت پیدا کنیم و خوشبختانه بعد از کلی تلاش، ترفند جالبی جهت آزاد سازی حافظه در برنامه های دات نتی پیدا کردیم. در صورت تمایل، ادامه این مقاله رو میتونید اینجا (http://mbnsoft.ir/post/free-memory-in-dotnet)بخونید.
مسئله
سوالی که در ابتدا به ذهن هر برنامه نویسی خطور میکنه اینه که چرا در دات نت نمیشه حافظه رو به طور کامل آزاد کرد؟ نکته اینجاست که سیستم نظارت بر حافظه در دات نت مدیریت شده هست (Managed) برای همین به برنامه نویس اجازه داده نمیشه که خودش در مورد وضعیت حافظه اشغال شده توسط برنامه، تصمیم بگیره!
مشکل
تا اینجا که همه چیز به نظر خوبه؛ یه سیستمی هست که زحمت مدیریت فضای اشغال شده در حافظه رو خودش میکشه و ما مجبور نیستیم به صورت دستی این کارو انجام بدیم، دمشم گرم!
ولی خبر بد اینکه متاسفانه سیستم مدیریت حافظه دات نت در اکثر مواقع این کارو به درستی انجام نمیده و با وجود کلاسی به نام GC که به برنامه نویس این اجازه رو میده تا اشیاء غیر قابل استفاده رو از توی حافظه پاک کنه، متاسفانه طبق تجربه، این کلاس هم تاثیر خاصی روی وضعیت حافظه نداره و ظاهرا درست عمل نمیکنه.
راهکار
نهایتا بنده خودم با یکی از دوستان برنامه نویس دست به کار شدیم تا شاید راهی برای این مشکل توی دات نت پیدا کنیم و خوشبختانه بعد از کلی تلاش، ترفند جالبی جهت آزاد سازی حافظه در برنامه های دات نتی پیدا کردیم. در صورت تمایل، ادامه این مقاله رو میتونید اینجا (http://mbnsoft.ir/post/free-memory-in-dotnet)بخونید.