ورود

View Full Version : حرفه ای: چرا با بستن فرم حافظه RAM خالی نمیشود؟



mmbguide
چهارشنبه 17 مهر 1392, 20:05 عصر
با سلام به همه دوستان

ابتدا برنامه اکسس 2103 رو باز کردم و در Task manager مقدار حافظه استفاده شده رو 23 مگابایت نشون داد. بعد یک فرم باز کردم که داخل ساب فرو اون تعدادی رکورد نمایش داده شده بود. در واقع بعد از باز شدن این فرم، حدود حافظه اشغال شده 23.2 مگابایت شد. ولیبعد از اینکه فرم رو بستم حافظه اشغال شده آزاد نشد بلکه همون مقدار 23.2 رو نمایش میداد و نکته مهم دیگه اینه که با هر بار اجرای همون فرم به مقدار حافظه اشغال شده 0.2 مگابایت اضافه میشد.

البته نمیدونم تو پروژه های بزرگ با تعداد رکوردهای زیاد که قرار با برنامه به دفعات زیاد و مدت طولانی در طول یک روز کار کرد، چقدر حافظه اشغال میشه!!!

سوال من اینه که راهی هست که با بستن هر فرم و یا گزارش که در واقع فضای حافظه رو اشغال میکنه، اون را آزاد کرد؟

mmbguide
یک شنبه 21 مهر 1392, 12:50 عصر
کمک کنید. این سوال فوق مهمه!!!

hamid-nice
یک شنبه 21 مهر 1392, 15:09 عصر
با سلام
دوست گرامی من هم علاقه مندم که تمام علتهایی که باعث این مساله می شه را بدانم و لی نمی دانم :قهقهه: اما امیدوارم با کمک اساتید گرامی موارد اینجا بیان بشه
اما برای شروع مواردی را خدمتتان عرض می کنم که می توانید بررسی کنید
یکی اینکه و قتی از دستوراتی مثل obj ، ADO ، کار کردن با رکروردست ، Db یا ... استفاده می کنید در آخر اگر آنها را خالی نکنید همین مشکل می تونه گاهی به طور چشمگیر بر حسب مورد ، بوجود بیاد بنابراین در آخر مثلا به صورت زیر می توانید عمل کنید
Set obj = Nothing
Set db = Nothing

موفق باشید

New Account
یک شنبه 21 مهر 1392, 18:05 عصر
کمک کنید. این سوال فوق مهمه!!!

سلام دوست من ، اگه اجازه بدید از آخر به اول جواب سئوالتون رو بدم

اتفاقا اصلا مهم نیست و توصیه میکنم زمانتون رو صرف چیزهایی خیلی مفید تری کنید که هم تاثیر گذار باشه و هم اینکه شما بتونید بر روی اون تاثیر بذارید

موردی که شما به اون اشاره کردید یک پدیده عادی هستش

در هنگام کار با یک دیتابیس حجم فایل به صورت موقتی شروع میکنه به افزایش که به این پدیده اصطلاحاً Bulbing میگن ، در این حالت حجم فایل افزایش پیدا میکنه ( حتی بدون اضافه کردن اطلاعات ) ، این رویه مرتبط هستش با عملکرد داخلی خود دیتابیس که در هنگام کار نیاز داره که اقدام به ایجاد آبجکتهایی به صورت موقت کنه

در صورتی که گزینه Compact On Close فعال بوده باشه ، اکسس این مورد رو به صورت خودکار در هنگام بسته شدن خودش ، تصحیح میکنه

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

اگر بر روی RAM فضا وجود داشته باشه ، اطلاعات رو بر روی اون بارگذاری میکنه و در غیر اینصورت بر روی Swap file موجود بر روی هارد دیسک .چون ویندوز مایل هست برنامه با سرعت بیشتری اجرا بشه پس تا حد امکان سعی میکنه فضای RAM رو به برنامه اختصاص بده

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

با این توضیحات پس نه شما نیازی به فکر کردن در خصوص این پروسه استاندارد دارید و نه میتونید کار خاصی در این خصوص انجام بدید ، در واقع اگر با توسل به توابع API اقدام به تخلیه RAM کنید ، اکسس مجدداً در اولین زمان و با توجه به نیازمندیهای خود سیستم ویندوز اقدام به بارگذاری مجدد برنامه در داخل RAM خواهد کرد

با این اوصاف مشخص نیست که شما در این بین میخواید چه کار کنید !؟

در خصوص این دو قطعه کدی هم که عنوان فرمودند

Set obj = Nothing
Set db = Nothing

این دو قطعه کد اقدام به آزاد سازی حافظه به شکلی میکنه که براتون در زیر توضیح میدم

فردی وجود داره با نام اکسس که در داخل شهری با نام RAM ؛ یک غلام داره ( همین آبجکت و یا دیتابیسی که شما Set کردید ) حالا شما این غلام رو با دستور Set db=Nothing آزاد میکنید

مشکل همچنان باقیست ، در این بین غلامی وجود داره که که درسته در خدمت شما نیست و اون رو آزاد کردید ولی این غلام در داخل شهر/RAM هستش ، وظیفه آزاد سازی کامل اون با فرمانداره/Windows

خوب دوستی ممکنه سئوال کنه اگر قرار هست که حافظه خالی نشه پس چه دلیلی برای استفاده از دستور Set db=Nothing وجود داره ؟

فرماندار وقتی اقدام به حذف کامل این غلام میکنه ، که این غلام صاحب و متولی نداشته باشه ، در واقع شما با این دستور غلام رو بدون متولی میکنید ، ویندوز هم آدمهای بدون متولی رو در فرصت مناسب جمع خواهد کرد

البته توضیح به زبان حال و مقتضای مطلب درج شده و به نظر نیازی به توضیح کامل تر نباشه

خدمتتون عرض کردم : به نظرم ذهنتون ، زمانتون ، استعدادتون و هرآنچه که دارید رو روی اینجور مسائلی صرف نکنید

پی نوشت :


ابتدا برنامه اکسس 2103 رو باز کردم و در Task manager مقدار حافظه استفاده شده رو 23 مگابایت نشون داد. بعد یک فرم باز کردم که داخل ساب فرو اون تعدادی رکورد نمایش داده شده بود. در واقع بعد از باز شدن این فرم، حدود حافظه اشغال شده 23.2 مگابایت شد. ولیبعد از اینکه فرم رو بستم حافظه اشغال شده آزاد نشد بلکه همون مقدار 23.2 رو نمایش میداد و نکته مهم دیگه اینه که با هر بار اجرای همون فرم به مقدار حافظه اشغال شده 0.2 مگابایت اضافه میشد

در جایی که دیگه اکثر کامپیوترها 2048 مگابایت رم دارند ، یک کم دست و دلباز تر باشیم :لبخندساده:

موفق باشید

mmbguide
یک شنبه 21 مهر 1392, 22:02 عصر
توضیح بسیار جالبی بود. ممنون