PDA

View Full Version : پر شدن حافظه



kj2007
یک شنبه 27 مرداد 1392, 00:09 صبح
با سلام
در داخل دو حلقه تو در تو مقادیر چند متغییر که از داخل آرایه فراخوانی میشوند داخل بانک اکسس 2007 ذخیره می شود مشکل اینجاست که پس از ثبت حدود 3000 رکورد پیام پر شدن حافظه یا اور فلو ظاهر می شود هارد سیستم یک ترابایت و رم 2 گیگ می باشد


Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\db.accdb;")
Dim dap As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("Select * from Table1", con)
Dim dst As DataSet = New DataSet()
Dim bns As BindingSource = New BindingSource()
Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand()
cmd.Connection = con
For ttn = 0 To (Picture.Height - 1)
con.Open()
For ssn = 0 To nn - 1
txt = letx(ttn, ssn, 0)
rtt = CType(dtrg(ttn, ssn), String)
ttnn = CType(ttn, String)
ssnn = CType(ssn, String)
cmd.CommandText = "insert into Table1 ([idl], [ran], [tedad], [elat]) values ('" + ttnn + "','" + ssnn + "','" + rtt + "','" + txt + "')"
cmd.ExecuteNonQuery()
dap.Fill(dst, "Table1")
Next ssn
con.Close()
Next ttn

Mani_rf
یک شنبه 27 مرداد 1392, 13:44 عصر
1- به برای تعریف کلاس های ارتباط با دیتابیس از Using استفاده کن تا بعد از Dispose شدن حافظه رو رها کنن؛
2- کانکشن رو یک بار باز کن؛ هرکار که داری انجام بده و در نهایت ببند؛ نه اینکه هی باز کنی ببندی.

kj2007
یک شنبه 27 مرداد 1392, 23:16 عصر
دوست عزیز در مورد دوم حق با شماست در حقیقت می خواستم ببینم میشود با باز و بستن کانکشن حافظه را آزاد نمود یا نه که نتیجه ای نداشت اما در مورد اول مطلب رو گرفتم اما تاکنون از using در این مورد استفاده نکرده ام لطفاً راهنمایی کنید

Mani_rf
دوشنبه 28 مرداد 1392, 16:29 عصر
بحث مدیریت حافظه و Garbage Collector ها بسیار پیچیده است. اگر در این زمینه علاقه داری 1کم جستجو کنی مطالب زیادی هست که حتما چیزهای جدید برات داره.
برای استفاده از Using یک مثال میزنم برای بقیه هم همینطوری اقدام کن. دستور Using خودش به صورت هوشمند حافظه گرفته شده رو مدیریت میکنه و موقعی که کارش تموم میشه به صورت کامل کار های لازم برای مدیریت حافظه رو انجام میده. (اطلاعات بیشتر در MSDN)

مثال :

Using dap As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("Select * from Table1", con)


end using

مهرداد صفا
دوشنبه 28 مرداد 1392, 22:11 عصر
با سلام.
در مورد ضرورت استفاده از using در تاپیک زیر:
علت استفاده از using (http://barnamenevis.org/showthread.php?352534-%D8%B9%D9%84%D8%AA-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-using-%DA%86%DB%8C%D8%B3%D8%AA-%D8%9F)