PDA

View Full Version : آزادسازی حافظه در یک برنامه Database



Bithiah
دوشنبه 11 مهر 1384, 08:28 صبح
باسلام خدمت دوستان عزیز
در یه برنامه Database که از طریق ADO به بانک اطلاعاتی Access وصل می شه، در ابتدای برنامه یه Connection به بانک برقرار می کنم و در انتهای برنامه هم اون رو می بندم. برای همه query ها از همون اتصال استفاده می کنم. هر موقع هم یه recordset ی باز می کنم، می بندمش و با دستور Set Nothing حافظشو آزاد می کنم، اما وقتی برنامه رو توی فهرست پروسه ها زیر نظر می گیرم می بینم بعد از اینکه یه رکوردستی باز می شه به حجم اشغالی حافظه توسط برنامه یه مقدار معمولا زیادی اضافه می شه که بعد از بستن اون رکوردست فقط 10% تا 20% اون مقدار بر می گرده. آیا راهی هست که بشه حافظه گرفته شده توسط رکوردست رو واقعا برگردوند؟
راستی یه بار هم امتحان کردم، هر دفعه که رکوردست رو می بستم، Connection رو هم بستم و در موقع نیاز دوباره بازش کردم، اما بی فایده بود.
ممنون می شم اگه راهنمایی کنین.

mRizvandi
دوشنبه 11 مهر 1384, 13:10 عصر
سلام

فکر می کنم شما مقدار حافظه ای که برای کش شدن در نظر گرفته میشه رو در نظر نگرفتی. بعد از باز شدن هر رکوردست ADO اون رو "کش" می کنه که تا زمان بستن کانکشن تقریبا اون رو نگه میداره. ;-) (-;

Bithiah
سه شنبه 12 مهر 1384, 13:53 عصر
آیا منظور شما اینه که من هر بار که اطلاعاتی از بانک می خوام باید وصل بشم و دوباره ارتباط رو قطع کنم و دفعه بعد دوباره به بانک اتصال برقرار کنم؟ من این کار رو یه مرتبه انجام دادم ولی بی فایده بود، فقط زحمت کد نویسیم زیاد شد

mRizvandi
چهارشنبه 13 مهر 1384, 10:01 صبح
سلام

دوست عزیز شما اصلا نباید ارتباطت رو با بانک تا انتهای برنامه قطع کنی چون اینطوری فقط پروسس و حافظه OverHead ایجاد میشه.
اون حجم از حافظه که باقی می مونه چقدره؟

Bithiah
چهارشنبه 13 مهر 1384, 10:18 صبح
گفتم که وقتی اون رکوردست رو Nothing می کنم، حدود حداکثر 20% حجمی که با باز کردنش گرفته شده بوده، آزاد می شه و بقیه اش اشغال باقی می مونه.

mRizvandi
شنبه 16 مهر 1384, 17:01 عصر
سلام

به نظر من اگر در برنامه تون تمام حافظه های اختصاص داده شده رو آزاد می کنید دیگه دنبال مابقی قضیه نباشید. (Set Nothing) این گفته من دلیل داره یکیش اینه:
وقتی شما یک متغیر آرایه ای تعریف می کنی در یک برنامه از نوع ActiveX Control تا زمانی که برنامه کلا از حافظه بیرون نره هیچ فضایی آزاد نمیشه.
فکر میکنم وی بی در زمان Termintae شدن هست که کلیه فضای حافظه اشغال شده رو آزاد میکنه.