PDA

View Full Version : مشکل با Free کردن Form



samprp
چهارشنبه 30 مرداد 1387, 19:30 عصر
سلام دوستان
من با دستور زیر تو فرم اصلی فرم about رو صدا می زنم .

Application.CreateForm(TfrmAbout, frmAbout);
frmAbout.ShowModal;
frmAbout.Free

بعد رفتم از تو تسک منیجر و نگاهی به حافضه مصرف شدش انداختم
وقتی که هنوز کد بالا رو تو برنامم فراخوانی نکردم برنامم حافظه مقدار مشخصی رو داره (مثلا 400 کیلو)
وقتی زدم این مقدار مشخص طبیعتا بیشتر می شه . (مثلا 500 کیلو)
ولی وقتی از فرم ابوت خارج می شم با توجه به اینکه من متد Free رو فراخوانی کردم ولی از حافظه فقط مقدار کمی کم می شه (مثلا می شه 450 کیلو)
یعنی یه 50 کیلویی حذف نشده

چه طوری می تونم کل فضای اختصاص داده شده رو حذف کنم .
با تشکر

delphiprog3000
چهارشنبه 30 مرداد 1387, 20:18 عصر
با سلام.

از این دستور استفاده کنید .


FreeAndNil(frmabout);


موفق باشید.............

vcldeveloper
پنج شنبه 31 مرداد 1387, 01:34 صبح
از این دستور استفاده کنید .
FreeAndNil همون کار Free را انجام میده، فرقش فقط اینه که شی را هم nil میکنه تا در ارجاعات بعدی احیانا AV نگیرید، پس کمکی در حل این مشکل نمیکنه!



ولی وقتی از فرم ابوت خارج می شم با توجه به اینکه من متد Free رو فراخوانی کردم ولی از حافظه فقط مقدار کمی کم می شه (مثلا می شه 450 کیلو)
یعنی یه 50 کیلویی حذف نشده
این مسئله طبیعی هست. وقتی یک process حافظه ایی از سیستم عامل دریافت میکنه، با آزاد شدن آن بخش از حافظه، بالافاصله حافظه را به سیستم عامل تحویل نمیده، بلکه سعی میکنه آن را برای استفاده های بعدی حفظ کنه. اگر سیستم عامل از نظر میزان حافظه خالی در تنگنا باشه، خودش به زور فضاهای استفاده نشده را از Processها میگیره. برای بررسی میزان حافظه مصرفی اشیاء در یک برنامه، یا درست آزاد شدن آنها، نمیشه به Task Manager ویندوز اتکا کرد؛ برای همچین اموری باید از نرم افزارهای Profiler استفاده کنید.

samprp
پنج شنبه 31 مرداد 1387, 05:22 صبح
ممنون

برای همچین اموری باید از نرم افزارهای Profiler استفاده کنید.
اگه یه لینکی هم می داد ممنون می شدم .

vcldeveloper
پنج شنبه 31 مرداد 1387, 17:06 عصر
اگه یه لینکی هم می داد ممنون می شدم .
مجانی: MemProof
تجاری: AutomatedQA AQTime