PDA

View Full Version : حرفه ای: رفع مشکل مدیریت حافظه در دات نت



محمد باقری نسب
شنبه 21 خرداد 1390, 13:46 عصر
لطفا مقاله زیر را مطالعه نمایید:

http://barnamenevis.org/showthread.php?291082-%D8%B1%D8%A7%D9%87%DA%A9%D8%A7%D8%B1%DB%8C-%D8%AC%D8%A7%D9%84%D8%A8-%D8%AC%D9%87%D8%AA-%D8%A8%D8%B1%D8%B7%D8%B1%D9%81-%DA%A9%D8%B1%D8%AF%D9%86-%D9%85%D8%B4%DA%A9%D9%84-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AD%D8%A7%D9%81%D8%B8%D9%87-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D8%AA%D8%AD%D8%AA-Net-Framework.

Directx
شنبه 21 خرداد 1390, 15:12 عصر
با تشکر از دوست عزیز به خاطر این کد جالبتون واقعا استفاده کردیم ولی ذکر چند مورد ضروری یه نظر میرسه



در هر حال هر چند شرکت مایکروسافت کلاسی به نام GC را تعبیه کرده است (Garbage Collector) که برنامه نویس بتواند به صورت دستی اشیاء ای که نیازی به وجود آنها نیست را از حافظه پاک کند ، ولی متاسفانه این کلاس نیز درست عمل نمی کند.


دوست عزیز درست نقطه ی مقابل این گفته ی شما درسته یعنی gc به هیچ وجه یه کنترلر دستی حافظه نیست و اتفاقا در بعضی موارد بسیار کارا عمل می کند ولی این گفته ی شما که مدیریت حافظه یه دغدغه ی بزرگ برای برنامه نویساس رو کاملا موافقم ولی این فقط دغدغه ی دات نت نویسا نیست اصولا هر برنامه کامپیوتری که توسط یه برنامه نویس نوشته می شه وقتی لقب ((برنامه با کارایی بالا)) یا high performance می گیره که از منابع حافظه و قدرت پردازش cpu بهترین استفاده رو ببره و این دوتا جزو اولی اصول برنامه نویسی هستند خوب منظورم چی بود؟ این بود که به نظر بنده یه برنامه نویس دات نت وقتی می بینه که برنامش کارایی ندره و از منابع حافظه درست استفاده نمی کنه باید اشکال رو تو کدهایی که نوشته جستجو که برای مثال همین چند تا مثالی که زدین اگه شما موقع نوشتن کد اونا منابع حافظه رو خوب در نظر می گرفتید ایا کار به اینجا می کشید که مثلا اون قسمت از حافظه رو رفرش کنیم شما میتونید با چند خط کد ساده مانع این کار بشید مثالا حالا یه مثال راجع به gc:

مثلا ما می خواییم سه string "من" و "یک برنامه نویس " "هستم" رو با هم ترکیب کنیم و به جمله ی string تولید کنیم اگه کد ما این باشه


strin str="من";
str+="یک برنامه نویس";
str+="هستم";

خب برای این مثلا آیا می دونستید که اون متغیر str ما سه بار تعریف می شه یعنی اینجوری

اولیش: "من"
دومیش:"من یک برنامه نویس"
سومیش:"من یه برنامه نویس هستم"

خوب اگه اینجوریه دوتای اولی چی می شه؟!!!
معلومه توسط gc نابود میشه!! یعنی اگه gc ببینه که مقدار زباله تو حافظه زیاده خود به خود دست به کار می شه و اشغالا رو پاک میکنه (اینو به زبون بچه ها گفتم:لبخند:) یعنی این جور نیست که gc بیاد مثلا تو هر ثانیه بیاد حافظه رو آزاد کنه بلکه موفقی کار میکنه که ما آشغال کمتری تولید کنیم خوب مسلما هرچی کمتر gc کار کنه کارایی برنامه ی ما بیشتر میشه دیگه یعنی کداهامون به گونه ای باشه که کمترین کار رو به gc واگذار کنه

مثلا برای مثال بالا ما می تونستیم از کلاس string builder استفاده کنیم به این صورت (ای دیگه آشغال نداره:لبخند:)

StringBuilder builder = new System.Text.StringBuilder("من");
builder.Append("یک برنامه نویس");
builder.Append("هستم");


هر وقت هم لازمش داشتیم می تونیم اینجوری استفاده کنیم مثلا:


Texbox1.Text = builder.ToString();


:لبخند: چقد نوشتم بهتر بو یا مقاله راجع به gc میدادم شرمنده که سرتونو در آوردم

Directx
شنبه 21 خرداد 1390, 16:43 عصر
شرکت مایکروسافت کلاسی به نام GC را تعبیه کرده است (Garbage Collector) که به صورت اتوماتیک اشیاء ای که نیازی به وجود آنها نیست را از حافظه پاک کند ، ولی متاسفانه این کلاس نیز گاهی درست عمل نمی کند.


حالا بهتر شد در ضمن ممنونم به خاطر یاداوری اصلا تشکر لازم نیست اگه تو مقاله اسم ببرین اون موقع که واقعا ازتون ناراحت میشم :تشویق::تشویق: