PDA

View Full Version : سوال: مشکل در پر شدن ram



god of war
دوشنبه 04 خرداد 1394, 12:10 عصر
دوستان سلام
یک عکس رو در نظر بگیرید که
هرکدم از عکسها یک picturebox هستن و روی هرکدومش که کلیک میکنیم میره از هارد یک عکس رو لود میکنه اگر دوتاعکس مثل هم بود که هیچ در غیر اینصورت به حالت قبل بر میگرده
مشکل من اینجاس ram خیلی زیادی اشغال میشه
تو taskmanager که میدیدیم با سه تا کلیک memory use به 200mg رسید
مشکل چیه ؟

ebrahim.rayatparvar
دوشنبه 04 خرداد 1394, 12:43 عصر
دادا چه کردی با 3 تا کلیک اینجور میشه با 30 تا کلیک PC منفجر میشه دیگه :متعجب:
عکس رو تو خود resource هم ریختی به همین صورت میشه؟؟؟بعد حجم عکس چقدره؟؟

god of war
دوشنبه 04 خرداد 1394, 12:58 عصر
دادا چه کردی با 3 تا کلیک اینجور میشه با 30 تا کلیک PC منفجر میشه دیگه :متعجب:
عکس رو تو خود resource هم ریختی به همین صورت میشه؟؟؟بعد حجم عکس چقدره؟؟
عکسا همه در حد چند kb هستش
بعد ببین وقتی این فرم هم میبندم به صفحه قبل برمیگردم ram هنوز پر میمونه
خاصیت image از همه picturebox ها رو هم dispose میکنم از 78 mg تقریبا 50mg خالی میشه
الان این صفحه وقتی run میشه memory به 78mg میرسه
چه کنم ؟ بعد از تحویله ...

god of war
دوشنبه 04 خرداد 1394, 13:02 عصر
ببین الان مشکل افزایش حجم با هر کلیک حل شده
حجم زیاد نمیشه دیگه اما حجم اولیش بازم زیاده یک و با بسته شدن فرم ram خالی نمیشه :(

ebrahim.rayatparvar
دوشنبه 04 خرداد 1394, 14:28 عصر
به نظر من این عمل Dispose رو انجام نمیده یه سری به GC بزن ببین با کد GC میتونی خالی کنی.

RmeXXXXXXXXX
دوشنبه 04 خرداد 1394, 21:24 عصر
فک نکنم به خاطر لود چندتا عکس (در حد کیلو) حافظه اینهمه شلوغ بشه!
حدس من چیزی جز این برداشته.
میشه کد لود تصویر تون رو بذارید با ساختار کلاسیتون!؟

god of war
دوشنبه 04 خرداد 1394, 23:10 عصر
مشکل تا حد زیادی حل شد
من با هرکلیک عکس رو به این شکل لود میکردم
((PictureBox)(sender)).Image = Image.FromFile(@"5\" + ((PictureBox)(sender)).Tag.ToString() + ".jpg");
مشکل افزایش حجم زمانی حل شد که کدو تغییر دادم به :

((PictureBox)(sender)).Image.Dispose();
((PictureBox)(sender)).Image = Image.FromFile(@"5\" + ((PictureBox)(sender)).Tag.ToString() + ".jpg");


این مشکل افزایش حجم با هر کلیکو حل کرد
برای مقدار عکس اولیه هم

Image g = memory.Properties.Resources.null2;

عکسو داخل یک image ریختم بعدش هم با یه foreach اومدم picturebox هارو مقدار دادم . خداروشکر که حل شد

mthreat.info
سه شنبه 05 خرداد 1394, 01:18 صبح
شما متد using رو هم امتحان کن (هر شی که ساخته بشه و قابلیت Dispose داشته باشه بعد از اتمام کار کلا رم رو از وجودش پاک میکنه ) در ضمن مستقیم یک فایل رو نخونید
تجربه ثابت کرده که با Stream کلی راحت تر میشه کار کرد ( فقط Close بشه بعد لود شدن ) این طوری عکس اصلی درگیر نیست