PDA

View Full Version : حافظه اشغالی رم توسط برنامه خود رو به طور چشمگیر پایین بیارید .



iranianprogrammers
شنبه 04 اسفند 1386, 01:23 صبح
سلام دوستان .
من برنامه ای نوشته بودم که کیلویی از حافظه رم استفاده میکرد .
بستگی داشت به فرمها و واکشی داده ها از بانک اطلاعاتی .
گاهی 120 مگابایت - گاهی 150 مگ و خلاصه حسابی رم رو درگیر میکرد .
همینطوری گشتی در سایت ها زدم و چیز جالبی گیرم اومد که حیفم اومد واسه شماها نذارم .
البته شاید اکثر اساتید این رو بدونند اما من واسه دوستای تازه کار مثل خودم اینرو میذارم .
باور نمیکنید . حجم استفاده از رم واسه من تو این برنامه حجیم بیشتر از 4 مگابایت نمیشه !!

بریم سر اصل مطلب .
پروسجر اصلی که بهتره تو فرم اصلی تون بزارینش :

procedure OptimizeRamUsage;
// This optimizes RAM memory usage
begin
SetProcessWorkingSetSize(GetCurrentProcess, $ffffffff, $ffffffff);
end;

حالا کافیه یه تایمر در همین فرم اصلی بذارید و Interval اون رو بین 1 تا 10 بذارید .
میتونید میزان حافظه رو قبل از استفاده از این پروسه و بعد از اون خودتون ببینید .
ممنون میشم دوستان نظرشون رو بگن و اگه این کار اشکال یا اصلاحی برای بهبود نیاز داره عنوان کنن .

vcldeveloper
شنبه 04 اسفند 1386, 01:56 صبح
تاثیری بر مقداری واقعی RAM استفاده شده توسط Process نخواهد داشت. فقط به ظاهر می بینید که حافظه کمتری استفاده شده، در عمل همون مقدار حافظه ایی که لازم بود استفاده بشه، استفاده میشه.

omid_delphi2
شنبه 04 اسفند 1386, 07:50 صبح
سلام دوست عزیز
تو این دوره زمونه که رم اینقدر ارزون شده و سیستمها حداقل با 1 گیگابایت بسته میشوند این روشها کاربردی ندارند به علاوه پایین آوردن میزان استفاده از رم مساوی کاهش چشمگیر برنامه به علت انجام مکرر عملیات paging میشود

hr110
شنبه 04 اسفند 1386, 08:53 صبح
سلام دوست عزیز
تو این دوره زمونه که رم اینقدر ارزون شده و سیستمها حداقل با 1 گیگابایت بسته میشوند این روشها کاربردی ندارند به علاوه پایین آوردن میزان استفاده از رم مساوی کاهش چشمگیر برنامه به علت انجام مکرر عملیات paging میشود

به هیچ وجه اینطور فکر نکنید و سعی کنید در نرم افزارهایی که تولید میکنید مسئله مدیریت حافظه را شدیداً رعایت کنید؛ دلایل زیادی داره از جمله اینکه کاربران شما فقط قرار نیست از محصول شما استفاده کنند، سرعت نرم افزار به مدیریت حافظه وابستگی شدیدی دارد ....

iranianprogrammers
شنبه 04 اسفند 1386, 10:51 صبح
تاثیری بر مقداری واقعی RAM استفاده شده توسط Process نخواهد داشت. فقط به ظاهر می بینید که حافظه کمتری استفاده شده، در عمل همون مقدار حافظه ایی که لازم بود استفاده بشه، استفاده میشه.
درسته .
ولی به نظر نمیرسه که بعد از انجام پروسه فضای اشغالی اون سریعا به رم برمیگرده ؟

vcldeveloper
شنبه 04 اسفند 1386, 11:42 صبح
ولی به نظر نمیرسه که بعد از انجام پروسه فضای اشغالی اون سریعا به رم برمیگرده ؟

The working set of a process is the set of memory pages currently visible to the process in physical RAM memory. These pages are resident and available for an application to use without triggering a page fault.

Using the SetProcessWorkingSetSize function to set an application's minimum and maximum working set sizes does not guarantee that the requested memory will be reserved, or that it will remain resident at all times. When the application is idle, or a low-memory situation causes a demand for memory, the operating system can reduce the application's working set.در عمل برنامه مقدار حافظه مورد نیاز خودش را اعلام میکنه و سیستم عامل هم صفحاتی از حافظه را برای استفاده این process علامت گزاری میکنه، ولی این مقدار حافظه تا زمانی که برنامه واقعا بهشون نیاز داشته باشه بهش داده نمیشند. اگر هم سیستم به منابع نیاز داشته باشه، همین صفحات علامت گزاری شده هم از برنامه گرفته میشند و در جای دیگه ایی مصرف میشند.

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

hr110
شنبه 04 اسفند 1386, 12:09 عصر
مدیریت منابع سیستمی که یک برنامه استفاده میکنه کاری پیچیده هست، اگر قرار بود به همین راحتی با یک تابع حاضر و آماده این کار رو انجام داد، دیگه کسی به خودش زحمت این همه کتاب و مقاله و کنفرانس و... را نمی داد.

منظور حقیر نیز همین مسئله بود، این مسئله را کسانی که برنامه نویسی را از داست و پاسکال 5 شروع کرده و سعی کرده باشند که در دلفی نیز به این قواعد را رعایت کنند به خوبی درک کرده و معمولاً مشکلات کمتری در پروژه های بزرگ پیدا خواهند کرد.