ورود

نسخه کامل مشاهده نسخه کامل : چجوري ميشه حافظه رو خالي كرد ؟



re_elhami_27
12-11-2007, 10:49
سلام
دوستان من برنامه اي دارم كه كمي گسترده است وقتي زياد از ADOtable استفاده ميشه حافظه كم مياره بنابر اين ميخوام قبل از باز كردن هر ADO حافظه رو خالي كنم تا جابراي بقيه اطلاعات بانك بشه

delphianddotnet
12-11-2007, 13:52
سلام به جای اینکه از Adotable استفاده کنی از Adodataset یا AdoQuery کن این جوری تمامی فیلد ها و مقادیر اونها به حافظه میاد دیگ0

sp1000
13-11-2007, 06:49
من از AdoQuery دارم استفاده میکنم ولی بازم حافظه کم اورد دوست عزیز راست میگه

اصلا مگه حافظه پیش فرض چقدره ؟

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

F A R H A D
13-11-2007, 10:01
وقتي زياد از ADOtable استفاده ميشه حافظه كم مياره بنابر اين ميخوام قبل از باز كردن هر ADO حافظه رو خالي كنم تا جابراي بقيه اطلاعات بانك بشه



من از AdoQuery دارم استفاده میکنم ولی بازم حافظه کم اورد دوست عزیز راست میگه
لطفا دقیق تر بگید منظورتون چیه که حافظه کم میاره! چه اتفاقی میفته که شما فکر میکنید به خاطر حافظه هست؟

روشی رو که delphianddotnet عزیز گفته خوبه اما اگر مجبورید که از adotable استفاده کنید، بهتره کارتون که با table تمام شد، جدول رو close کنید

مرد مباح
13-11-2007, 10:08
موقعي كه نياز به يه تيبل داري اونو باز كن و بلافاصله بعدش ببند. دقيقا مطابق حرفي كه فرهاد جان گفت.
ولي مسئله اصلي اينه كه خيلي بعيده به خاطر تعداد ADOTable شما حافظه كم بياري. به نظر من مشكلت يه جاي ديگس.

delphianddotnet
13-11-2007, 14:07
موقعي كه نياز به يه تيبل داري اونو باز كن و بلافاصله بعدش ببند. دقيقا مطابق حرفي كه فرهاد جان گفت.
ولي مسئله اصلي اينه كه خيلي بعيده به خاطر تعداد ADOTable شما حافظه كم بياري. به نظر من مشكلت يه جاي ديگس.

این بستگی به ساختار جداول و نوع دیتا هایی ک در اون ذخیره میکنی داره و در ضمن در هر بار که عملیاتی مثل نمایش رکورد ها در دبی گرید رو انجام میدهید خوب نباید همه فیلد هاتونو به کاربر نمایش بدهید
Select * from tablename
کد بالا بدترین حالت مکن برای Fetch کردن رکورد هاست
همون طور که مرد مباح گفت پس از پایان کار دیتا ست هاتو ببند

sp1000
14-11-2007, 06:40
من توی دیتا ماژول حدودا 30 تا AdoQuery قرار دادم

وقتی توی برنامه ام میخوام دیتا ماژول را فراخوانی کنم پیغام خطلا می اومد که منظورش این بود فضا نداری

وقتی چند تا از AdoQuery را پاک کردم مشکلم بر طرف شد

همین منظورم بود

F A R H A D
14-11-2007, 07:34
من توی دیتا ماژول حدودا 30 تا AdoQuery قرار دادم
مطمئنا برنامه شما از 30 تا دیتابیس استفاده نمیکنه! برای هر دیتابیس یک adoconnection وجود داره، پس اگر دیتابیس دارای 50 جدول هم باشه شما با استفاده از یک AdoQuery هم میتونی به تمام جدولها دسترسی داشته باشی.
در ساختار برنامه ای که نوشتی باید تغییراتی بدی، چون استفاده از 30 تا query عجیبه.
موفق باشی

delphianddotnet
15-11-2007, 10:48
در ساختار برنامه ای که نوشتی باید تغییراتی بدی، چون استفاده از 30 تا query عجیبه.
چیش عجیبه ؟
من حتی 30 به بالا رو امتحان کردم و هیچ جای نگرانی نیست.
فقط تنها تو صیه ای که میکم اینه که Active همه Query هاتو False کنی و تو قسمتی که کوری رو اجرا میکنی Open و در پایان کار Close کن

F A R H A D
15-11-2007, 10:59
چیش عجیبه ؟
این که میتونه با استفاده از یک query اطلاعات 300000 جدول رو بازیابی کنه!

re_elhami_27
16-11-2007, 00:27
من در برنامه پس از اينكه چند بار در جدولها حركت ميكنم ( اطلاعات آنها را ميبينم ) اين پيام رو ميده :
access violation at address 00401a86 in module 'project1.exe read of address 00000000'
علتش مگر حافظه نيست؟

re_elhami_27
16-11-2007, 00:30
ممنون از زحمات دوستان
وقتي روي جداول حركت ميكنم بعد از ديدن اطلاعات چند جدول پيام زير مياد:
access violation ad adress in module 'project1.exe' read of address 000000

delphianddotnet
17-11-2007, 14:02
این که میتونه با استفاده از یک query اطلاعات 300000 جدول رو بازیابی کنه!

اینکه شما میخواهید در یک کوری زدن 300000 رکورد و واکشی کن(یکجا)کمی عجیب به نظر میرسه

F A R H A D
18-11-2007, 07:16
دوست عزیز عرض کردم جدول نه رکورد!
ضمنا واکشی همون 300000 رکورد هم با روش صحیح میتونه در زمان کمی صورت بگیره. یکی از خصوصیات بانک اطلاعاتی همینه که اطلاعات زیادی رو در زمان کم بازیابی کنه.
موفق باشی

re_elhami_27
25-11-2007, 14:07
من كه جواب نگرفتم و نفهميدم چكار كنم لطفا راه چاره اش رو بگيد ؟

F A R H A D
25-11-2007, 19:39
من در برنامه پس از اينكه چند بار در جدولها حركت ميكنم ( اطلاعات آنها را ميبينم ) اين پيام رو ميده :
access violation at address 00401a86 in module 'project1.exe read of address 00000000'
علتش مگر حافظه نيست؟

این پیغام زمانی بوجود میاد که شما میخوای به قسمتی از حافظه دسترسی داشته باشی که وجود نداره
فرض کنید رکوردی رو در قسمت متغیر ها تعریف کردید ولی هنوز متغیری از نوع رکورد وجود نداره. اگر شما بخوای بهش دسترسی داشته باشی همچین پیغامی ظاهر میشه. البته این یک نمونه بود و دلایل متعددی میتونه داشته باشه