PDA

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



MEhdi Sobhani
پنج شنبه 25 آذر 1389, 05:45 صبح
با عرض سلام و خسته نباشید
به یه مشکلی برخوردم .
برنامم یه فرم مادر داره که داخلش به تعداد زیادی میتونه فرم فرزند باز بشه .
فرمها رو که چند بار باز و بسته میکردم خطاهای عجیب و بیربط اتفاق می افتاد که در نهایت سرچ کردم به این رسیدم که مشکلی در مدیریت حافظه هست و بستن فرمها .
چند جا نوشته بودند که به جای free از release استفاده کنم که استفاده کردم و مشکلات کمتر شدند ولی بازم اتفاق می یفتن و مهمتر اینکه وقتی رم درگیر برنامه رو نگاه میکنم با بستن فرمها اصلا کم نمیشه !!!
لطفا راهنمایی بفرمایید
با تشکر فراوان .

حمید محمودی
پنج شنبه 25 آذر 1389, 11:20 صبح
سلام،

فرمی که بسته میشه رو کاملا از حافظه خارج کردید؟ اگر نه، میشه با نوشتن Action := caFree در Onclose فرم اینکار رو انجام داد.

MEhdi Sobhani
پنج شنبه 25 آذر 1389, 14:03 عصر
سلام،

فرمی که بسته میشه رو کاملا از حافظه خارج کردید؟ اگر نه، میشه با نوشتن Action := caFree در Onclose فرم اینکار رو انجام داد.
سلام
بله
این کار رو انجام میدم
یه جا نوشته بود به جای فری برای فرم ها از release استفاده کنید که اون رو هم انجام دادم ولی بازم مشکل حل نشد .

MEhdi Sobhani
پنج شنبه 25 آذر 1389, 15:24 عصر
سلام
مشکل برطرف شد .
با فری کردن فرم ها از این مشکلات خیلی پیش میاد بخصوص وقتی فرمها حج بالای حافظه استفاده کنند و از رویدادهای مختلفشون هم استفاده بشه و کارهای مختلفی هم انجام بدن .
با تشکر .

vcldeveloper
پنج شنبه 25 آذر 1389, 23:30 عصر
یه جا نوشته بود به جای فری برای فرم ها از release استفاده کنید که اون رو هم انجام دادم ولی بازم مشکل حل نشد .
Release مربوط به زمانی هست که بخواید از داخل کد مربوط به یکی از Event های یک فرم، همان فرم را آزاد کنید. وقتی یک Event فراخوانی میشه، شما هنوز در حال اجرای کدهای اون شی هستید. اگر وسط اجرای Event اون شی را آزاد کنید، معلوم نیست بعد از پایان Event چه کدی باید اجرا بشه. برای همین از Release در همچین شرایطی استفاده میشه. کاری هم که Release انجام میده اینه که یک پیام به صف پیام های فرم ارسال میکنه، تا بعد فرم با پردازش آن، خودش را آزاد کنه. زمانی که اون پیام پردازش میشه، کد شما کارش تمام شده. Action := caFree در رویداد OnClose هم همان کار Release رو انجام میده.