PDA

View Full Version : Out Of Memory Exeption



HoshangiAli
چهارشنبه 06 مرداد 1389, 18:29 عصر
سلام دوستان

من یه کلاسی دارم و در داخل این کلاس متغییرهای زیادی رو تعریف کردم
م خواستم بگم راهی هست که بتونم فضای اشغال شده توسط کلاسم رو پس بگیرم (وقتی که کارم باهاش تموم شد)

ممنون میشم اگه کمکم کنید

FastCode
چهارشنبه 06 مرداد 1389, 18:46 عصر
باید کلاستون interface ‌ه IDosposable رو implement بکنه.
توی متود dispose باید تمام کلاسهایی رو که تولید کردید رو در صورت امکان dispose بکنید.
reference های اونها رو null قرار بدید.
GC.Collect();

HoshangiAli
چهارشنبه 06 مرداد 1389, 18:55 عصر
ممنون میشه یه کد با کلاس Static برام بذارید ممنون میشم

FastCode
چهارشنبه 06 مرداد 1389, 19:12 عصر
ممنون میشه یه کد با کلاس Static برام بذارید ممنون میشم
خاصیت کلاس static اینه که تا لحظه اخر Unload نمیشه مگر اینکه با reflection این کار رو انجام یدید.
یه نظر من بهتره که از یه singleton استفاده کنید.

ricky22
چهارشنبه 06 مرداد 1389, 20:00 عصر
یه نظر من بهتره که از یه singleton استفاده کنید.


توضیحاتی درباره Singleton :


الگوی طراحی نرم افزار اصلاحا به راه حل های استاندارد و قابل استفاده مجدد ،برای حل مشکلات عمومی توسعه نرم افزار اطلاق میگردد. یک الگو راه حل نهایی حل شده نیست که به سرعت بتوانیم به سراغ پیاده سازی آن بریم. بلکه شرحی است از نحوه حل مشکل که باید آنرا تکمیل کرد و در زبان برنامه نویسی مورد نظر بومی سازی و پیاده سازی نمود. استفاده از الگو های طراحی نرم افزار سرعت توسعه برنامه را بسیار زیاد میکند و چون از یک راه حل استاندارد استفاده شده است قابلیت توسعه و نگه داری بهتری نیز دارد. الگوهای طراحی تا سال 1994 شهرت چندانی نداشتند. اما بعد از اینکه کتاب Design Patterns: Elements of Reusable Object-Oriented Software توسط آقایان Erich Gamma، Richard Helm,
Ralph Johnsonو John Vlissidesانتشار یافت، شهرت و محبوبیت الگوهای طراحی به سرعت زیاد شد. در این کتاب 23 الگو در 3 دسته شرح داده شده بود. این گروه ها عبارتند از الگوهای سازنده یا creational الگوهای ساختاری یا
structural و الگوهای عملکرد یا behavioral.
امروز میخواهیم کار خود را بایک الگوی بسیار ساده از دسته Creational شروع کنیم. الگوی ساده، زیبا و پر کاربرد Singleton.
در زمانی که نیاز دارید که از یک کلاس تنها یک شی ایجاد شود و مطمئن باشید که نمونه دیگری از این شی وجود ندارد، و تمام قسمت های مختلف برنامه شما تنها از این شی استفاده میکنند میتوانید به الگوی Singleton اعتماد کنید.
اما پیاده سازی این الگو در زبان



public sealed class Singleton
{
private Singleton() { }
static readonly Singleton instance = new Singleton();
public static Singleton Instance
{
get { return instance; }
}
}
در این کلاس، سازنده کلاس به صورت خصوصی علامت گذاری شده است. در نتیجه امکان ایجاد یک شی از کلاس به کمک New وجود ندارد. حالا که جلوی ایجاد شی را برای برنامه نویس بستیم، باید به طریقی امکان ایجاد یک شی را از این کلاس ایجاد کنیم.
برای این منظور یک خاصیت خصوصی و فقط خواندنی به صورت استاتیک به این کلاس اضافه میکنیم که از جنس همین کلاس است. خصوصی است برای اینکه امکان تغییر آن به وسیله برنامه نویس وجود نداشته باشد. فقط خواندنی است تا فقط یک بار بتوان به آن مقدار داد. و استاتیک است تا بین تمامی نمونه های ایجاد شده از این کلاس مشترک باشد.
حالا این کلاس را به کمک متد UniqueInstance در اختیار استفاده کننده ها میگذاریم.
در قسمت زیر راه پیاده سازی دیگری برای شما به نمایش گذاشته شده که تحلیل آن به عهده خود شما است.


public sealed class Singleton
{
private Singleton() { }
static Singleton instance;
public static Singleton Instance
{
get
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
}


منبع (http://alirezaoroumand.blogspot.com/2010/06/blog-post_08.html)