ورود

View Full Version : مشکل با آزاد کردن حافظه



حمیدرضاصادقیان
سه شنبه 09 بهمن 1386, 14:57 عصر
سلام دوستان.من وقتی یک فرم رو باز میکنم تقریبا 820kb فضا اشغال میکنه.وقتی که فرم رو می بندم هنگام بستن فرم تمام کوئری هایی رو که باز کردم می بندم بعد نودهایی که ایجاد کردم آزاد میکنم.وقتی هم که فرم کامل بسته شد ، فرم رو هم Free میکنم هم nil میکنم.ولی وقتی حافظه برنامه رو نگاه میکنم فقط 200kb آزاد شده باز 600kb آزاد نشده وجود داره.در صورتی که اصلا متغیر گلوبالی هم تعریف نکردم که مشکلی باشه.
مشکل از کجاست؟
با تشکر.

JAFO_IRAN
سه شنبه 09 بهمن 1386, 19:29 عصر
سلام

ممکنه وقتی یک کاری رو برای اولین بار انجام میدید، یکسری Library بار شوند. لطفا تست کنید که این 600k در هر بار باز و بسته کردن فرم گم میشه یا فقط برای یکبار این اتفاق میافته. اگر تکرار نشه، ممکنه همون مورد ذکر شده باشه و "تقریبا" جای نگرانی نیست...

ارادت

حمیدرضاصادقیان
سه شنبه 09 بهمن 1386, 19:54 عصر
دقیقا همین حرف شماست.چون مراتب بعدی فقط 200 کیلوبایت کم یا زیاد میشه.و دیگه این 800k به کنار میرود.ولی این چه کتابخانه هایی هست که لود میشه.(یعنی من نباید بفهمم این سیستم چه .... میکنه) :لبخند: البته با روش قبلی که به ظاهر برنامه نویسهای قبلی پیاده سازی کرده بودند بسته به دیتای مشتری بین 10 مگابایت تا 30 مگابایت فقط همین یک فرم دیتا لود میکرد که الان به 800k رسیده است!!!!!!!

JAFO_IRAN
سه شنبه 09 بهمن 1386, 21:40 عصر
سلام

میشه که MDAC باشه - برای ADO میاد بالا - به هر حال دقت در مورد حافظه مصرفی خیلی مهمه و همین الان هم معلومه که 30Mb به 800K کلی پیشرفته - در ضمن حافظه‌ای که مورد بحثه ممکنه توسط هر فرم دیگری هم (اگه اول سراغ یک فرم مشابه دیگه میرفتی) مصرف میشد و یعنی ممکنه تقصیر همین فرم هم نباشه...

ارادت

vcldeveloper
چهارشنبه 10 بهمن 1386, 02:19 صبح
دقت کنید که اعداد و ارقامی که Task Manager درباره حافظه یک Process میده خیلی دقیق نیست. از طرفی، حافظه ایی که آزاد میشه، اگر مدیر حافظه ویندوز به آن نیاز نداشته باشه، بالافاصله به اون برگشت داده نمیشه، بلکه در اختیار Process باقی میمونه که برای کارکردهای دیگه ازش استفاده کنه. هر وقت هم که مدیر حافظه ویندوز بهش نیاز پیدا کرد، حافظه مربوطه از Process گرفته میشه و جای دیگه مصرف میشه.

حمیدرضاصادقیان
چهارشنبه 10 بهمن 1386, 07:25 صبح
پس با این تفاسیر جای نگرانی نیست.بذارم ویندوز برای خودش حال کنه. :قهقهه:

Inprise
چهارشنبه 10 بهمن 1386, 12:56 عصر
VCL از مدیر حافظه خودش استفاده میکنه . یعنی در اغلب حالتها برنامه های دلفی مستقیما با روتینهای مدیریت حافظه ویندوز تعامل ندارن . مدیر حافظه VCL هم لزوما فضای هر متغیر یا شی ای را بعد از تخریب آزاد نمیکنه و این دلائل مختلفی داره .

حمیدرضاصادقیان
چهارشنبه 10 بهمن 1386, 13:33 عصر
حالا اینپرایز عزیز این دلائل چه چیزهایی میتونن باشن؟ یعنی هیچ جوری نمیشه فهمید مربوط به چه شی هایی هست؟