ورود

View Full Version : سوال: مشکل با حجم در حافظه و dispose



shahrdar
پنج شنبه 28 آذر 1387, 17:38 عصر
سلام به همه
2 تا فرم دارم. فرم اول رو که باز ميکنم 7 mb از رم رو اشغال ميکنه فرم 2 رو که باز ميکنم 130 mb رو اشغال ميکنه
حالا با فرمان های

Close يا dispose

فرم 2 بسته ميشه ولی هنوز 130 تا از رم اشغاله

کسی راه حلی داره؟

mostafaaa
پنج شنبه 28 آذر 1387, 18:06 عصر
سلام دوست من
در مورد کلاس GC جستجو کن حتما به جواب میرسی.
البته اگه انگلیسیت خوب باشه توضیحات MSDN برات کفایت میکنه.
فقط یه توضیح کوچیک اینکه : وظیفه این کلاس اینه که فضاهای توی رم رو که استفاده نمیشه خالی بکنه در واقع میتونیم بگیم یه جورایی یه زباله روب برای memory سیستم محصوب میشه.

shahrdar
پنج شنبه 28 آذر 1387, 18:17 عصر
متاستفانه اين کلمه خيلی کوتاهه دنباله GC class هم که ميگردم گير نمياد شما نميدونی GC مخفف چه کلمه اييه؟

shahrdar
پنج شنبه 28 آذر 1387, 18:23 عصر
اسمه کاملشو گير اوردم garbage collector

خودشم گير ميآرام برای همه ميزارم اينجا

shahrdar
پنج شنبه 28 آذر 1387, 19:00 عصر
دوسته عزيز ميتونی يه کمکی کنی

من برای object يا کلاس ها پيدا کردم ولی نميدونم چجوری برای فرم استفادش کنم

mostafaaa
پنج شنبه 28 آذر 1387, 21:42 عصر
سلام دوست من
بزار یه مثال خیلی ساده از استفاده از این کلاس برات بزنم.
فرض کن یک کلاس به شکل زیر داریم:

Public Class Sample
Dim L As List(Of Integer)
Public Sub DoWork()
L = New List(Of Integer)
For i As Integer = 0 To 10000000
L.Add(i)
Next
End Sub
End Classبا فراخوانی متد DoWork یک چیزی حدود 70MB از فضای Memory سیستم اشغال میشه.

Dim MySample As New Sample
Private Sub btnDowork_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDowork.Click
MySample.DoWork()
End Subاگه بخوای به این شکل این کلاس رو از بین ببری ، اون مقدار 70MB بهت برنمیگرده.

Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
MySample = Nothing
End Subیا حتی اگه کلاس قابل Dispose کردن هم بود باز هم همین نتیجه رو میداد.
ولی اگه به این شکل کلاس رو از بین ببری جریان فرق میکنه.

Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
MySample = Nothing
GC.Collect()
End Subامیدوارم به دردت خورده باشه
البته شاید راههای بهتری هم برای حل کردن این مشکل باشه !!