PDA

View Full Version : سوال: افزايش صعودي RAM



r_zamani
یک شنبه 17 آذر 1387, 12:04 عصر
سلام دوستان
من يه نرم افزار نوشتم كه تعدادي فرم داخلش بنا به نياز توسط كاربر باز و بسته ميشه...
يه مشكل پيش اومده و اون اينكه:با باز شدن هر فرم،ram مصرفي افزايش پيدا ميكنه و حتي با بسته شدن فرم به مقدار اوليه برنميگرده و همين طور زياد ميشه...تا جايي كه براي باز شدن فرمها بايد زمان زيادي صبر كرد.
ممنون ميشم كسي راه حلي ارائه كنه...

علیرضا مداح
یک شنبه 17 آذر 1387, 12:57 عصر
سلام دوست عزیز،
بدین صورت نمی توان نظر قطعی داد، شما باید اطلاعات بیشتری را راجع به برنامه خود ارائه دهید؛
به طور نمونه:
1)در هر فرم از چه منابعی استفاده می کنید؟
2)چه کنترل هایی در هر فرم وجود دارد؟
3)ارتباط شما با دیتابیس چگونه است؟
4)از چه اشیائی در هر فرم بهره می گیرید؟
5)...

به طور کلی باید اطلاعات کافی راجع به معماری نرم افزار خود را ارائه دهید تا بتوان راه حلی پیشنهاد داد،/

r_zamani
دوشنبه 18 آذر 1387, 11:51 صبح
با سلام
در فرمها ديتاگريد هست كه موقع load فرم از ديتابيس fill ميشه.
ديگه كنترلهاي معمولي مثل باتون هاي اضافه و حذف و اصلاح و ...
به طور كلي فرمها با ديتابيس در ارتباطن. ولي وقتي بسته ميشن ram كم نميشه و fill شدن داده هاي داخل بقيه فرمهايي كه كاربر باز ميكنه خيلي طول ميكشه چون از ماكزيمم ram موجود بيشتر داره مصرف ميشه...

r_zamani
چهارشنبه 20 آذر 1387, 10:18 صبح
توضيحاتم كافي نبود؟

reza1944
چهارشنبه 20 آذر 1387, 10:43 صبح
شما فرم رو به جای اینکه ببندید hide کنید که وضعیت رم سر جای خودش بمونه شاید این هم یه راح حل باشه!

r_zamani
چهارشنبه 20 آذر 1387, 10:54 صبح
ولي فرمهاي hide شده چون بسته نشدن، حافظه شون آزاد نميشه!

navid_vandi
پنج شنبه 05 دی 1387, 12:00 عصر
منم همین مشکل رو دارم
دقیقا برنامه منم همین کار رو انجام میده
ممنون میشم اگه کمک کنید

emdadgar2
جمعه 06 دی 1387, 12:54 عصر
فرم را min کنید، از حالت انتخاب خارج کرده و بعد از چند لحظه به حالت اول برگردانید.
بخشی از حافظه که اضافی اشغال شده است آزاد می شوند.
این روش تست شده است!!! چون خودم با این مشکل برخورد کرده ام:متعجب:

samispeed
شنبه 07 دی 1387, 12:22 عصر
شما دیتاگرید رو چه جوری پر میکنید با چه دستوراتی ، آیا از stored procedure استفاده می کنید ؟

vcldeveloper
شنبه 07 دی 1387, 17:26 عصر
از یک Profiler درست و حسابی استفاده کنید برای اندازه گیری میزان حافظه استفاده شده برنامه استفاده کنید. در حالت عادی وقتی با برنامه هایی مثل Task Manager ویندوز اندازه گیری می کنید، نتیجه دقیقی بدست نمیارید، چون وقتی برنامه شما حافظه ایی را از سیستم عامل درخواست میکنه، با آزاد کردن آن حافظه، بلافاصله اون حافظه به سیستم عامل برگردانده نمیشه، بلکه برای استفاده های بعدی رزرو میشه. هر وقت سیستم عامل نیاز به حافظه داشته باشه، و با کمبود حافظه مواجه باشه، این حافظه های رزرو شده را از برنامه های باز میگیره، و در جایی که نیاز هست، استفاده میکنه. پس خیلی نمیشه روی اطلاعاتی که Task Manager بهتون میده حساب باز کرد.
وقتی برنامه خودتان را Minimize می کنید، ویندوز حافظه ایی که برنامه برای خودش رزرو کرده بود را بلافاصله از برنامه می گیرد. این به معنی آن نیست که برنامه آن حافظه را اشغال کرده بود، بلکه چون ویندوز نیازی به آن حافظه نداشت، اصراری هم به گرفتنش نداشت، اما وقتی برنامه Minimize شد، یعنی عملا کاربر با آن کار خاصی ندارد، پس ویندوز می تواند این حافظه را از برنامه بگیرد، و به امور مهمتری اختصاص بدهد.

در همین رابطه می تونید این مطلب را هم مطالعه کنید:
http://www.itwriting.com/dotnetmem.php

Chris_Ronaldo
شنبه 07 دی 1387, 19:51 عصر
سلام

به نظر من کمی راجع به garbage collector تحقیق کنید.
بهتره بعد از استفاده از آبجکت های روی فرم در هنگام بسته شدن فرم، آنها را Dispose کنید.
به عنوان مثال ممکنه dataView داشته باشید که دات نت نتونه اونو بعد از بسته شدن فرم خالی کنه.
در ضمن یادتون نره که در این جور موارد همیشه آخرین سرویس پک ویژوال استودیو را نصب کنید.
اگر نتیجه نگرفتید باز هم توضیح بدهید تا من یا دوستان شما را بیشتر راهنمایی کنند.

موفق باشید

shahrdar
یک شنبه 08 دی 1387, 03:14 صبح
سلام

من چند روزه پيش همچين سؤالی رو کردم و يکی از دوستان جوابمو داد. برای مثال ما يک کلاس داريم به نامه GOOD
وقتی کرم با اين کلاس تموم شد ميتونم با اين کار از تو رم درش بيارم
Good = nothing
gc.collect

mostafaaa
یک شنبه 08 دی 1387, 09:11 صبح
سلام دوست من
اینم لینکه مطلبی که دوستمون shahrdar (http://barnamenevis.org/forum/member.php?u=26022) گفتن.
[/URL][url]http://barnamenevis.org/forum/showthread.php?t=136937 (http://barnamenevis.org/forum/member.php?u=26022)