PDA

View Full Version : مشکل dispose کردن



SajjadKhati
پنج شنبه 09 آذر 1396, 23:01 عصر
سلام
من کد




using (System.IO.StreamReader file = new System.IO.StreamReader(@"F:\Film\TV\Serial\Mokhtar Nameh\mokhtar name 2.divx"))
{
string a = file.ReadToEnd();
}


رو که اجرا میکنم (حجم فایلم حدودا 250 مگ هست) ، بعد از اتمام بلاک ، هیچ چی ز منابع و رم آزاد نمیشه و 1 گیگ از رم رو اشغال میکنه با اونکه توی دستور using نوشته و متد dispose رو فراخونی میکنه
چرا؟
فقط بعد از بلاک using ، متد GC.Collect() رو فراخونی میکنم ، اشغال رم به حدود 500 مگ کاهش پیدا میکنه ولی به حالت اولیه اش (قبل از خوندن فایل) که 7 مگ رو اشغال میکرد ، نمیرسه
چی کار باید کنم تا به حالت اولش برگرده؟
ممنون

parvizwpf
جمعه 10 آذر 1396, 11:15 صبح
شما داری مباحث دات نت رو چک میکنید؟ یا اینکه فایل حجیم در حافظه لود میکنید؟

SajjadKhati
جمعه 10 آذر 1396, 12:12 عصر
شما داری مباحث دات نت رو چک میکنید؟ یا اینکه فایل حجیم در حافظه لود میکنید؟

سلام
ممنون
هر دو

SajjadKhati
جمعه 10 آذر 1396, 22:07 عصر
جوابش رو پیدا کردم
باید متغییر رشته رو قبل از فراخونی متد GC.Collect() ، باید null کنم تا از رم پاک شه :


using (System.IO.StreamReader file = new System.IO.StreamReader(@"F:\Film\TV\Serial\Istadeh Dar Ghobar\058-istadeh-dar-ghobar-ghesmat-5.mp4"))
{
string a = file.ReadToEnd();
a = null;
}


GC.Collect();






ولی یه سوال .
مگه وقتی کنترل برنامه به اتمام بلاک در using در بالا برسه ، اتوماتیک متغییر a که تعریف شده ، اشاره گرش از دست نمیره؟