PDA

View Full Version : سوال: آزاد سازی فضای حافظه



rkhabbazi
چهارشنبه 16 تیر 1389, 10:11 صبح
سلام:چشمک:
برای اینکه فضای اشغال شده توسط متغیر ها و فرم هایی که در حین اجرای برنامه ایجاد شده اند را در حین اتمام کار و یا بستن فرم ، آزاد کنیم، از چه دستوری می توان استفاده کرد؟:افسرده:
اگر دقت کرده باشید، اگر یک فرم را در حین اجرای برنامه خروجی، چند بار با متد creat ایجاد کنیم و بعد از اتمام کار ببندیم، برای هر بار ایجاد فرم، فضایی از حافظه تخصیص داده می شود و این باعث اشغال غیر مجاز حافظه می شود.:عصبانی++:
اگر کسی در اینباره راه حلی دارد، لطفا راهنمایی کند. با تشکر:بوس:

rkhabbazi
پنج شنبه 17 تیر 1389, 10:02 صبح
سلام
یه چیزایی برای جواب سوال خودم پیدا کردم ولی کامل نیست.:گیج: به کد های موجود در آدرس های زیر توجه کنید:
http://delphibasics.co.uk/RTL.asp?Name=FreeMem
http://delphibasics.co.uk/RTL.asp?Name=FreeAndNil
امیدوارم که مفید واقع شود. اگر باز هم کدی داشتید به من هم بگویید. موفق باشید
:خجالت:

Mahmood_M
پنج شنبه 17 تیر 1389, 12:24 عصر
در همین سایت جستجو کنید ، بارها بحثهایی در این زمینه انجام شده ، در ضمن ، سعی کنید سئوالتون رو در بخش مناسب مطرح کنید ...

vcldeveloper
پنج شنبه 17 تیر 1389, 12:46 عصر
اگر دقت کرده باشید، اگر یک فرم را در حین اجرای برنامه خروجی، چند بار با متد creat ایجاد کنیم و بعد از اتمام کار ببندیم، برای هر بار ایجاد فرم، فضایی از حافظه تخصیص داده می شود و این باعث اشغال غیر مجاز حافظه می شود.
مدیریت حافظه یک فرآیند هست؛ و شما باید در حین نوشتن کد، به آن توجه داشته باشید. اینطور نیست که شما یک تابع داشته باشید که کار مدیریت حافظه را براتون انجام بده، و شما با وجود آن، هیچ دغدغه ایی نداشته باشید. مثلا شما باید بدونید که هر بار یک شی را Create می کنید، باید یک ارجاع به اون شی داشته باشید، و تا زمانی که آن را Free نکردید، به آن شی مقدار جدیدی اختصاص ندید. اگر شما همچین اصولی را رعایت نکنید، ابزاری نمیتونه خرابکاری که به واسطه این روش کدنویسی غلط شما حاصل میشه رو براتون اصلاح کنه.

پس باید برید درباره Memory Management در دلفی تحقیق کنید، و با مفاهیم مدیریت حافظه آشنا بشید. اگر با این مفاهیم آشنا باشید، ابزارهایی مثل متد Free یا تابع FreeMem و غیره کاربرد پیدا می کنند، و گرنه 100 تا از این ابزارها هم وجود داشته باشند، چون نمیدونید کی و کجا و چطور ازشون باید استفاده کنید، وجودشان دردی از شما دوا نمیکنه.

rkhabbazi
سه شنبه 16 آذر 1389, 08:50 صبح
سلام
راهش اینه که در رویداد ONCLOSE فرم دستور ACTION:=CAFREE را بنویسیم. این راه رو آقای مجید تاجیک نشان دادند و درست هم بود.