صفحه 2 از 2 اولاول 12
نمایش نتایج 41 تا 50 از 50

نام تاپیک: آزاد کردن RAM بعد از بستن فرم

  1. #41
    VIP آواتار Amir Oveisi
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    هر جا که حال کنم - فعلا یزد
    پست
    2,604
    اینم جواب کامل این مشکل :

     class MyClass : IDisposable
    {
    public long[] a = new long[10000000];

    public void Dispose()
    {
    a = new long[0];
    GC.Collect();
    }


    }


    public partial class Form2 : Form
    {
    MyClass m = new MyClass();
    public Form2()
    {
    InitializeComponent();
    }

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
    m.Dispose();
    }
    }


    برنامه کاملشو اینجا گذاشتم
    فایل های ضمیمه فایل های ضمیمه

  2. #42
    سلام.
    برمودا کد جالبی بود. رم رو آزاد میکنه. ولی به ازای هر فرمی که باز میکنیم حدود یکی دو مگ رم اشغال میمونه. یعنی مثلا 10 بار فرم رو باز کنیم و بعد همه رو ببندیم رم آزاد میشه ولی حدود 20 مگ اشغال میمونه.

  3. #43
    سلام.
    برمودا شما آرایه رو تو کلاس تعریف کردی. اگه من بخوام تو خود فرمم تعریف کنم این روش جواب نمیده.
    کسی روش دیگه ای به ذهنش نمیرسه؟

  4. #44

  5. #45

  6. #46
    ولی به ازای هر فرمی که باز میکنیم حدود یکی دو مگ رم اشغال میمونه. یعنی مثلا 10 بار فرم رو باز کنیم و بعد همه رو ببندیم رم آزاد میشه ولی حدود 20 مگ اشغال میمونه.
    از چه طریقی چک می کنید که مقدار RAM اشغالی چه مقدار هست؟
    اگه از Task Manager ویندوز استفاده می کنید، عددی که بهتون نشون میده چندان قابل اطمینان نیست، چون وقتی برنامه حافظه ایی را آزاد میکنه، به سرعت اون حافظه به ویندوز برگشت داده نمیشه، بلکه بصورت Allocated برای اون Process باقی می مونه تا زمانی که یا خود Process ازش استفاده کنه، یا ویندوز اونو نیاز داشته باشه. برای بررسی وضعیت مصرف حافظه برنامه از ابزارهایی که برای این کار تولید شدند استفاده کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #47
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    نقل قول نوشته شده توسط علی کشاورز مشاهده تاپیک
    از چه طریقی چک می کنید که مقدار RAM اشغالی چه مقدار هست؟
    اگه از Task Manager ویندوز استفاده می کنید، عددی که بهتون نشون میده چندان قابل اطمینان نیست، چون وقتی برنامه حافظه ایی را آزاد میکنه، به سرعت اون حافظه به ویندوز برگشت داده نمیشه، بلکه بصورت Allocated برای اون Process باقی می مونه تا زمانی که یا خود Process ازش استفاده کنه، یا ویندوز اونو نیاز داشته باشه. برای بررسی وضعیت مصرف حافظه برنامه از ابزارهایی که برای این کار تولید شدند استفاده کنید.
    باور کنید من هم از وقتی این تاپیک شروع شده دارم دنبال جواب همین سوال می گردم.

  8. #48
    سلام.
    برمودا جان من که فقط نمیخوام یه آرایه تعریف کنم که تو کلاس تعریف کنم یا تو form closing بیام مقدارش رو 0 کنم. کلی متغیر هست و همشون هم تو فرمم هستن و با اشیا فرم ارتباط دارن. میشه برد تو کلاس ولی من میخوام بدونم وقتی داخل فرم هستن و فرم بسته میشه چطور میشه رم رو آزاد کرد. آرایه رو فقط برای تست مثال زدم.

    جناب کشاورز من هم همینو میگم. میگم رم آزاد نمیشه و من میخوام با کد نویسی بلافاصله آزادش کنم.

    سار جان از زحمات شما هم ممنونم.

  9. #49
    VIP آواتار Amir Oveisi
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    هر جا که حال کنم - فعلا یزد
    پست
    2,604
    دوست عزیز باید بنابه اون کاری که میخواین انجام بدین یه روشی پیدا کنین که بشه باهاش Memory رو آزاد کرد (البته PageFile بگم بهتره )
    ولی بر اساس ساختار کلاس ها اگه شما این کارو با طراحی کلاس ها انجام بدین بهتر نتیجه خواهید گرفت
    (در کل 90% یه روش مطلق واسه این کاری که شما میگین وجود نداره )
    اگر نظر من موردی داشت خوشحال میشم اطلاعات کامل تری بگیرم از دوستان

  10. #50
    سلام.
    راستش برنامه من کلاینت سروریه.
    تو این تاپیک مشکلمو مطرح کردم ولی جواب نگرفتم.
    https://barnamenevis.org/showthread.php?t=88885
    خلاصه مشکلم اینه که وقتی ارتباط برقرار میشه و بعد که دیسکانکت کنم دیگه نمیتونم همون پورت رو باز کنم. برمودا فکر کنم این سوال رو تو یاهو هم ازت پرسیده بودم.
    خیلی هم سرچ کردم ولی کدی برای حل مشکلم پیدا نکردم.

    آخرش طبق معمول که به بن بست میخوریم به فکر کلک رشتی افتادم. گفتم خوب اگه فرم رو ببندم و دوباره باز کنم 100% متغیری که قبلا ساخته شده از بین میره و میشه پورت رو دوباره باز کرد. ولی به یه مشکل جدید بر خوردم و دیدم رم متغیرم رو نگه میداره و باز همون ارور صادر میشه.

    حالا شما بگید چی کار کنم.

صفحه 2 از 2 اولاول 12

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

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