PDA

View Full Version : سوال: پر شدن فضای رم



mohammad mehd
سه شنبه 26 فروردین 1393, 10:58 صبح
باسلام
پایگاه داده ای نوشتم برای موسسه ای با اسکیوال و سی شارپ
اسکیول 2008 و سی شارپ 2012 بر روی ویندوز7 حالا که برنامه به اتمام رسیده برای موسسه بردم دیدم ویندوزشون xp3 هست مجبور شدم اونجا اسکیوال 2000 نصب کنم چون هیچ کدوم از ورژن هاش نصب نمیشد. برنامه اجراشد و داده هشون رو اضافه کردن حالا یک مشکل پیش اومد بعد از یک مدتی ، وقتی که زیاد فرم ها باز و بسته میشد امکان داشت توی فرمی اگر شخصی رو جستجو میکردن میگفت ارتباطم با اسکیوال قطع شده و اگر برنامه بسته میشد و دوباره اجرا میشد مشکل برطرف میشد. توجه کردم دیدم رم کامپیوترشون 2گیگ هست وقتی یک فرم باز می کنن و میبندن فضای خالی به رم برنمیگرده و همین جور داره پر میشه تا به 2گیگ میرسه و این پیغام رومیده دیدم که من برای کانکشنش هم close گذاشتم آمدم باکامپیوتر خودم برسی کردم دیدم که این فضای خالی روبرمیگردونه فقط اونجا هست که این اتفاق می افته حالا باید چه کار کنم کدی هست که بشه فضارو بعد هر بار استاده خالی کرد؟

Rejnev
سه شنبه 26 فروردین 1393, 12:24 عصر
آیا برنامه حجم زیادی اطلاعات رو از پایگاه داده میخونه؟ مثلا یک گرید رو پر میکنه؟
آیا تو گرید ها عکس دارین؟

mohammad mehd
سه شنبه 26 فروردین 1393, 13:44 عصر
فقط 1 گرید دارم که توش عکس پرسنل داره حجم کل عکس ها هم شاید 50 مگ بشه همین

mohammad mehd
سه شنبه 26 فروردین 1393, 13:45 عصر
آیا برنامه حجم زیادی اطلاعات رو از پایگاه داده میخونه؟ مثلا یک گرید رو پر میکنه؟
آیا تو گرید ها عکس دارین؟
فقط 1 گرید دارم که توش عکس پرسنل داره حجم کل عکس ها هم شاید 50 مگ بشه همین

behzadkhan
سه شنبه 26 فروردین 1393, 15:27 عصر
با سلام

امیدوارم مشکلت حل بشه:

==============================================

هنگام رویداد بسته شدن هر فرمی آن فرم را this.Dispose کن.

یا

از این دستور در لود هر فرم استفاده کن:


GC.Collect();
GC.WaitForPendingFinalizers();

Rejnev
سه شنبه 26 فروردین 1393, 17:53 عصر
من هم همین مشکل رو داشتم...
مشکل از عکس هاست.
برای اطمینان از حرفم کافیه لود عکس ها رو حذف کنید و دوباره امتحان کنید. (یعنی از دیتابیس هیچ عکسی خونده نشه)
اگه از Linq استفاده میکنید، شاید لازم باشه یک کوئری جدید بنویسید و یک لیست از یک کلاس جدید رو توی انتخاب بوجود بیارین. مثل:

public class PersonelView
{
public int id{get;set}
public string name{get;set;}
//public string ...
}
//..
public List<PersonelView> GetPersonelList()
{
var q=from p in db.Personels
select new PersonelView()
{
id=p.ID,
name=p.Name,
//...
};
return q.ToList();
}

mohammad mehd
سه شنبه 26 فروردین 1393, 18:52 عصر
با سلام

امیدوارم مشکلت حل بشه:

==============================================

هنگام رویداد بسته شدن هر فرمی آن فرم را this.Dispose کن.

یا

از این دستور در لود هر فرم استفاده کن:


GC.Collect();
GC.WaitForPendingFinalizers();


اولین کد شما باعث شد کل برنامه بسته بشه دومین هم کار خواصی نکرد همون فضا آزاد نشد!

mohammad mehd
سه شنبه 26 فروردین 1393, 18:54 عصر
من هم همین مشکل رو داشتم...
مشکل از عکس هاست.
برای اطمینان از حرفم کافیه لود عکس ها رو حذف کنید و دوباره امتحان کنید. (یعنی از دیتابیس هیچ عکسی خونده نشه)
اگه از Linq استفاده میکنید، شاید لازم باشه یک کوئری جدید بنویسید و یک لیست از یک کلاس جدید رو توی انتخاب بوجود بیارین. مثل:

public class PersonelView
{
public int id{get;set}
public string name{get;set;}
//public string ...
}
//..
public List<PersonelView> GetPersonelList()
{
var q=from p in db.Personels
select new PersonelView()
{
id=p.ID,
name=p.Name,
//...
};
return q.ToList();
}

فکر نکنم مربوط به لود عکس ها باشه آخه رو ویندوز 7 این مشکل نیست اصلا همیشه این فرم که عکس توش هست باز نمیشه ولی باز این اتفاق می افته!

behzadkhan
سه شنبه 26 فروردین 1393, 20:03 عصر
سلام

دوست عزیز ظاهرا مشکل شما هنوز برطرف نشده:

============================================

یک راه زمان بر:

(در ویندوز xp) شما باید برنامه taskmanager را باز بزارید و در قسمت های مختلف برنامه حرکت کنید و در اون قسمتی که می بینید حافظه برنامه در حال افزایش است متوجه می شوید که ایراد از این قسمت یا قسمت هاست.

و بعد کد اون قسمت را بررسی می کنید.

حالا trace را فقط در آن قسمت انجام می دهید و دقیقا محلش را پیدا می کنید.

بعد اگر توانستید حل می کنید.

در غیر این صورت به سایت ارجاع می دهید.

با تشکر