ايران ويج

نسخه‌ی کامل: آزاد کردن RAM بعد از بستن فرم
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام.
من وقتی یه فرم رو میبندم حافظه اشغال شده داخل RAM آزاد نمیشه. چطور باید یه فرم نه کل برنامه رو ببندم تا رم اشغال شده کاملا آزاد شه؟
کی میگه ازاد نمیکنه پس گاربیج کالکتور کارش چیه
وقتی scope یه متغیر تموم میشه یا dispose یه کلاس صدا میشه
گاربیج کالکتور میاد اشغال های تو ram نو رو جمع میکنه میره
علاوه بر اون میشه اینجوری هم صداش کرد
system.gc.collect()
سلام.
نه نمیشه. من برای تست یه آرایه long به طول 10000000 تعریف کردم که رم اشغالی رو 100 مگ افزایش میداد. ولی بعد از بسته شدن فرم باز هم این 100 مگ اشغال میمونه. تا این که کل برنامه رو ببندم.
گفتم که مدیریت حافظه رو خود C# انجام میده و طی بازه های زمانی خاصی اشغال های تو ram رو میاد جمع میکنه میره یکی از اون زمانها کم آوردن ram میباشد . دقیق اومدن گاربیج کالکتورو میتونی از microsoft بپرسی
ولی مثلا با استفاده از using اینجور چیز ها تقریبا میشه کنترلش کرد .
مثلا using (sqlconnection connection=new sqlconnection)
{
}
که با این کار بسته شدن connection و آزاد سازی منابع سیستم تضمین میشه .
سلام.
خوب همین دیگه. من نمیتونم صبر کنم تا رم کم بیاد. من باید همه منابع رو به محض بستن آزاد کنم.
system.gc.collect رو یه تست بزن
سلام.
اونم تست کرده بودم. جواب نداد.
برنامتو به صورت unsafe بنویس ببین جواب میگیری .
سلام.
بیشتر توضیح بده.
منکه تست کردم آزاد کردم . شاید ramet خرابه !

کد:
class Program
{
public const int MaxNumber = 1000000;

static private void Main(string[] args)
{
Test();
GC.Collect();
Console.ReadLine();
}

static private void Test()
{
int[] array = new int[Program.MaxNumber];
for (int i = 0; i < array.Length; i++)
array[i] = i;
array = null;
}
}
سلام.
لابد انتظار داری من بیام بگم پس چرا رو سیستم من جواب نمیده؟
سوالی که تو سال 86 مطرح شده رو تو سال 88 جواب میدی. چه خونسردم بحث رو ادامه میده.
ممنون از کمکت. یادم نیست این مشکل رو چطور حل کردم. ولی اون موقع یه بلایی سر برنامه اوردم.
صفحه‌ها: 1 2