نمایش نتایج 1 تا 8 از 8

نام تاپیک: ازاد کردن فضای حافظه هنگام بستن فرم

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    تیر 1389
    محل زندگی
    قم
    پست
    39

    ازاد کردن فضای حافظه هنگام بستن فرم

    سلام، خسته نباشید. من یه سوال دارم، اگه امکانش هست کمکم کنید.من وقتی یه فرم از برنامه را میبندم حافظه ای که اون فرم اشغال کرده آزاد نمیشه. من از GC استفاده کردم ولی فایده ای نداره.(من از مشاهده میزان فضای اشغال شده توسط برنامه در task manager متوجه شدم که حافظه ای که در اثر باز کردن فرم ایجاد میشه در اثر بستن اون از بین نمیره).

  2. #2

    نقل قول: ازاد کردن فضای حافظه هنگام بستن فرم

    خب شاید موقع باز کردن فرم یه شی دیگه هم ایجاد میکنی و اون رو پایین نمیاری، بهتره سعی کنی برای تمام اشیات از IDisposable به ارث ببری و Dispose رو فراخونی کنی و اشیای زیادی رو null کنی و تهش از GC استفاده کنی، اما تمام اینا اما و اگرن کدت رو بزاری بهتر میشه کمک کرد.

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    تیر 1389
    محل زندگی
    قم
    پست
    39

    نقل قول: ازاد کردن فضای حافظه هنگام بستن فرم

    یه واقعیت (حداقل من توی C#‎ این رو فهمیدم) اینه که اگه شما هر فرمی رو باز کنی و بعد بخوای ببندی فضای اشغال شده توسط اون فرم ازاد نمیشه. (میتونی توی task manager ببینی) فرقی نمیکنه که فرمت ساده باشه یا اینکه مملو ابجکت ها و thread ها و ... باشه.
    اما این IDisposable رو که گفتی من استفاده نکردم ولی اگه مثل همون dispose فرم باشه یعنی همون کار رو انجام بده فکر نمیکنم فایده ای داشته باشه. حلا اگه ممکنه بیشتر دربارش توضیح بده تا ببینیم فایده داره یا نه.راستی از همه معذرت میخوام اگه خودمونی حرف میزنما، من چاکر همتون هم هستم و از کسانی که جواب پست هام رو میدن بسیار ممنونم.

  4. #4

    نقل قول: ازاد کردن فضای حافظه هنگام بستن فرم

    IDisposable چیز خاصی نیست میتونی در نظر بگیری یه جور distructor رو داری فراخونی میکنی مثلا به Contructor و Ditructore تایمر سیستمت دسترسی نداری یه چنین امکاناتی میده از پروژت جداش کنی. ولی کدت رو بذار بعد. الان نمیدونم چی کار داری میکنی.

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    تیر 1389
    محل زندگی
    قم
    پست
    39

    نقل قول: ازاد کردن فضای حافظه هنگام بستن فرم

    اخه من کجای کدمو برات بذارم؟یعنی این مشکل من مربوط به جای خاصی نمیشه شما فکر کن فرم من کلی ابجکت داره، چندتا thread داره و یه سری هم timer و چیزهای معمولی دیگه.نگاه کن دوست عزیز من وقتی دکمه ضربدر فر ممو میزنم ، فرم بسته میشه و متد dispose خود فرم فراخونی میشه. من توی رویداد form_closing از gc.collect استفاده کردم که جواب نداد، تمام کنترل ها رو هم یکی یکی تخریب کردم باز جواب نداد. حالا اینکه شما میگی کدتو بدار ، کدی نیست که بخوام بذارم.اصلا مسئله ی من اینه: میخوام یه فرم ببندم و فضای اشغال شده فرم ازاد بشه شما یه راه حل یا یه تیکه کد به من بدید. راستی گفتم که توی C#‎ بعد از بستن فرم ها معمولا فضای اشغال شده توسط اونها ازاد نمیشه.یعنی ریطی نداره که من توی فرمم از چه ابجکت ها و اشیایی استفاده کرده باشم یا چه جوری برنامه نوشته باشم.ازاد شدن حافظه بعد از بستن فرم یه کار غیر معموله.

  6. #6
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    نقل قول: ازاد کردن فضای حافظه هنگام بستن فرم

    سلام داداش های گل من
    اول بگم که GC میاد حافظه رو زباله روبی می کنه و آشغال ها رو میگذاره دم در. اما اینکه این آشغال های آماده رو کی میگذاره سر خیابون، بحث دیگری ست. در حقیقت باید گفت هر وقت عشقس بکشه به اونا ترتیب اثر میده. اگه اشتباه نکنم زمانی که سیستم حافظه کم بیاره یا برنامه بسته بشه معمولا این کار رو بکنه. دقیق نمی دونم. اما اگه شما سیستمت دچار مشکل نمیشه فکرش رو نکن.
    در مورد IDispose هم بگم که بهتره توسط دستور using استفاده بشه و مستقیم صدا زده نشه:
    https://barnamenevis.org/showth...38#post1019938

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    تیر 1389
    محل زندگی
    قم
    پست
    39

    نقل قول: ازاد کردن فضای حافظه هنگام بستن فرم

    مشکل من زمانی به چشم میاد که شما یه برنامه بزرگ داشته باشی که فرمهای زیادی ( مثلا 15 فرم با هم باز باشن(برنامه چت)) اینجاست که میزان اشغال حافظه میره بالا، در سیستمهای امروزی که حافظه های زیادی دارن مشکلی پیش نمیاد، ولی این جور برنامه دیگه یه برنامه حرفه ای نیست، یعنی ما عملا داریم صورت مسئله رو پاک میکنیم.
    من میخوام برنامم در هر صورت بهینه باشه.
    در مورد GC میدونم که هیچ غلطی نمیکنه، Dispose هم که اصلا نمیدونم واقعا کاری میکنه یا نه،هرچی هست فضا رو که ازاد نمیکنه.
    حالا من یه روشی رو امتحان کردم که جواب داده ولی نمیدونم درسته یا نه.
    مثلا اگه بر نامه من 50mb حافظرو اشغال کرده باشه، من یه دستوری به برنامه میدم که کمترین وبیشترین میزان فضای مورد نیاز رو میگیره و اعمال میکنه، در اینصورت فضای اشغال شده مثلا میرسه به 20mb. ولی نمید.نم ایا اون 30mbی که ازاد شده بعدا برنامرو با مشکل مواجه میکنه یا نه یا اصلا اون حافظه استفاده خواهد شد یا نه؟البته هر عددی رو بعنوان حداکثر قبول نمیکنه.یعنی اگه برنامه در حال استفاده از اون حافظه باشه پیغام خطا میده.
    حالا میخواستم نظرتون رو بگید.به نظرتون خوبه یا نه؟البته با چند تا تست که انجام دادم برنامه مشکل پیدا نکرد.ولی اینکه اون تو چی میگذره منو میترسونه.میترسم یه وقت برنامه منفجر بشه.

  8. #8
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    نقل قول: ازاد کردن فضای حافظه هنگام بستن فرم

    نقل قول نوشته شده توسط ahmadi.edu مشاهده تاپیک
    مشکل من زمانی به چشم میاد که شما یه برنامه بزرگ داشته باشی که فرمهای زیادی ( مثلا 15 فرم با هم باز باشن(برنامه چت)) اینجاست که میزان اشغال حافظه میره بالا، در سیستمهای امروزی که حافظه های زیادی دارن مشکلی پیش نمیاد، ولی این جور برنامه دیگه یه برنامه حرفه ای نیست، یعنی ما عملا داریم صورت مسئله رو پاک میکنیم.
    من میخوام برنامم در هر صورت بهینه باشه.
    در مورد GC میدونم که هیچ غلطی نمیکنه، Dispose هم که اصلا نمیدونم واقعا کاری میکنه یا نه،هرچی هست فضا رو که ازاد نمیکنه.
    حالا من یه روشی رو امتحان کردم که جواب داده ولی نمیدونم درسته یا نه.
    مثلا اگه بر نامه من 50mb حافظرو اشغال کرده باشه، من یه دستوری به برنامه میدم که کمترین وبیشترین میزان فضای مورد نیاز رو میگیره و اعمال میکنه، در اینصورت فضای اشغال شده مثلا میرسه به 20mb. ولی نمید.نم ایا اون 30mbی که ازاد شده بعدا برنامرو با مشکل مواجه میکنه یا نه یا اصلا اون حافظه استفاده خواهد شد یا نه؟البته هر عددی رو بعنوان حداکثر قبول نمیکنه.یعنی اگه برنامه در حال استفاده از اون حافظه باشه پیغام خطا میده.
    حالا میخواستم نظرتون رو بگید.به نظرتون خوبه یا نه؟البته با چند تا تست که انجام دادم برنامه مشکل پیدا نکرد.ولی اینکه اون تو چی میگذره منو میترسونه.میترسم یه وقت برنامه منفجر بشه.
    برادر من،
    چه کار به کار سیستم عامل و مفسر داری؟ اونا خودشون با هم کنار میاند. نگران اونا نباش. اگه optimize بودن خیلی برات مهم هست، هیچ وقت سراغ دات نت نرو. چون اعصابت رو خورد می کنه. خود #C داره بهت میگه که لازم نیست object ی رو از حافظه حذف کنی. اون رو بده دست من خودم هر وقت صلاح دیدم یک بلایی سرش میارم. شما کاریت نباشه. دیگه پلتفرم از این مهربون تر؟

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •