صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 50

نام تاپیک: آزاد کردن RAM بعد از بستن فرم

  1. #1

    آزاد کردن RAM بعد از بستن فرم

    سلام.

    من وقتی یه فرم رو میبندم حافظه اشغال شده داخل RAM آزاد نمیشه. چطور باید یه فرم نه کل برنامه رو ببندم تا رم اشغال شده کاملا آزاد شه؟

  2. #2
    منظورتون از اینکه رم اشغال شده کاملا آزاد نمیشه چیه ؟ احتمالا از یک Refrence (مثلا Image ) استفاده میکنید و بعد از بستن فرم ، نمیتونید از ان استفاده کنید. لطفا مشکل رو جزئی تر مطرح کنید. ولی در کل عملیات آزاد سازی اشیاء در Net. توسط GC (Garbage Collection بصورت خودکار انجام می شود.

  3. #3
    سلام.
    من برای تست یه آرایه از نوع long به طول 10000000 تعریف کردم. وقتی فرم رو میبستم رم همچنان اشغال میموند. من میخوام بالافاصله بعد از بستن فرم رم آزاد شه.

  4. #4
    .می تونید از using در هنگام تعریف آرایه استفاده کنید

  5. #5
    سلام.
    من گفتم آرایه رو برای تست آزاد شدن رم استفاده کردم. مشکل من اصلا آرایه نیست. من میخوام کل فرم بعد از بسته شدن از رم خارج شه نه آرایه.

  6. #6
    سلام دوست عزیز.
    من زیاد وارد نیستم و اگه درست متوجه شده باشم میخوای بعد از بستن برنامه منابعی که توسط برنامه اشغال شده آزاد بشه. اگه منظورتون اینه فکر میکنم باید از
    Application.Exit();

    استفاده کنید.

  7. #7
    من زیاد وارد نیستم و اگه درست متوجه شده باشم میخوای بعد از بستن برنامه منابعی که توسط برنامه اشغال شده آزاد بشه.
    وقتی برنامه بسته بشه، فضای حافظه ایی که ویندوز براش در نظر گرفته بود، آزاد میشه، در نتیجه تمام منابعی که در فضای آدرس اون Process تعریف شده باشند هم آزاد میشند. پس کد شما تاثیری در آزاد کردن منابع process نداره.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  8. #8
    ولی در کل عملیات آزاد سازی اشیاء در Net. توسط GC (Garbage Collection بصورت خودکار انجام می شود
    فقط در تئوری اینطور هستش


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

  9. #9
    سلام.
    خوب چطور میشه حلش کرد؟
    من نمیخوام کل برنامه رو ببندم. فقط یه فرم رو میبندم و منابع اون فرم باید آزاد شه.

  10. #10

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

    پس از ایجاد شی ازنوع فرم و نوشتن دستور show بلافاصله دستور myForm.Dispose() را بنویسید.

  11. #11
    سلام.
    این کار رو هم کرده بودم. dispose هم جواب نمیده.

  12. #12
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    ممکنه بگی چطور بعد از Dispose کردن کلاس فرمت فهمیدی که فرمت هنوز حافظه رو اشغال کرده؟

  13. #13
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط illegalyasync مشاهده تاپیک
    فقط در تئوری اینطور هستش




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

  14. #14
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط Payman62 مشاهده تاپیک
    سلام.
    خوب چطور میشه حلش کرد؟
    من نمیخوام کل برنامه رو ببندم. فقط یه فرم رو میبندم و منابع اون فرم باید آزاد شه.
    یک مثال بفرستید که ما هم این مشکل را ببینیم.

  15. #15
    سلام.
    اینم نمونه مشکل جناب آرژنگ.
    راستی شما اولین کسی بودی که تو این سایت به من پیغام خصوصی داد. روز دوم عضو شدنم بود که دیدم پیغام دادی. لینک تایپ فارسی رو داده بودی که تو امضاتم هست.
    فایل های ضمیمه فایل های ضمیمه

  16. #16
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط Payman62 مشاهده تاپیک
    سلام.
    اینم نمونه مشکل جناب آرژنگ.
    راستی شما اولین کسی بودی که تو این سایت به من پیغام خصوصی داد. روز دوم عضو شدنم بود که دیدم پیغام دادی. لینک تایپ فارسی رو داده بودی که تو امضاتم هست.
    فینگیلیشی خواندن سخته، برایه همین لینک تایپ فارسی را فرستادم و در امضام هست، ولی تا جائی که میدانم ۳ نفر بیشتر ازش استفاده نمیکنند.

  17. #17
    کاربر دائمی آواتار silentrise
    تاریخ عضویت
    مهر 1386
    محل زندگی
    Tehran
    پست
    147
    دوستان ظاهرا با GCحل میشه ...
    فایل های ضمیمه فایل های ضمیمه

  18. #18
    سلام.
    نه این کد مشکلو حل نکرد. بازم رم اشغال میمونه. بعضی مواقع خالی میشه ولی اکثر مواقع نمیشه.

  19. #19
    اولا بگید که از کجا می فهمید که رمتون آزاد نمیشه.
    دوما روی سیستم من وقتی با VS ران می کنم و در شرایط عادی میبندم رمم آزاد میشه ولی اگر به تعداد زیاد اجرا کنم Exception رخ میده که باعث میشه GC درست کار نکنه! که در این شرایط کافیه هندل کنی Exception رو و در Catch این کدارو بذاری:
    GC.Collect();
    this.Dispose();
    سوما اگه Exe شده برنام رو اجرا کنی بازم مشکلی نداره!

  20. #20
    برای من هم مشکلی نداره.

  21. #21
    کاربر دائمی آواتار silentrise
    تاریخ عضویت
    مهر 1386
    محل زندگی
    Tehran
    پست
    147
    سلام
    البته فکرکنم دوستمون از PageFileUsage نگاه میکنه تا حدی حرفش درسته از نظر سیستمی دلیلی ندارم براش ولی موضوع جالبیه ادم به یاده قدیم میافته.اون زمان موظف به ازاد کردن رم بودیم انگار الان هم هستیم.

  22. #22
    سلام.
    من که تو پست 15 مثال گذاشتم. شما تست کنید. میبینید رم اشغال میمونه. چه از تو خود C#‎ چه فایل exe. فایلی هم که جناب silentrise گذاشتن مشکلو حل نکرد.

  23. #23
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط Payman62 مشاهده تاپیک
    سلام.
    من که تو پست 15 مثال گذاشتم. شما تست کنید. میبینید رم اشغال میمونه. چه از تو خود C#‎ چه فایل exe. فایلی هم که جناب silentrise گذاشتن مشکلو حل نکرد.
    در ثانی این روش استفاده از GC درست نیست!

  24. #24
    این کد رو تست کنید
    System.Enviroment.Exit(System.Enviroment.ExistCode );//exit from prossec of exicting code
    آن لحظه که تنها اعتبار کسی که مساله ای را مطرح کرده است، شما را در اشتباه بودن ایده هایتان قانع کرد،
    آن لحظه،
    لحظه وداع شما با دنیای خلاقیت و پیشرفت خواهد بود. . .

    برنولی

  25. #25
    سلام.
    این کد که کل برنامه رو میبنده دوست عزیز.

  26. #26
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    لطفن این رو برسی کنید.
    فکر می کنم بعد از عمل بسته شدن فرم، کل فرم (کلاس) عملن از حافظه خارج شده باشه.
    البته امیدوارم من منظور شما رو درست درک کرده باشم.
    فایل های ضمیمه فایل های ضمیمه

  27. #27
    سلام.
    این که همون برنامه ایه که خودم گذاشتم. تغییری توش ندادی.

  28. #28
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    یک کلاس به شکل زیر بهش اضافه کردم :

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    namespace Test33
    {
    publicclass FormControl : System.Windows.Forms.Form
    {
    public FormControl()
    {
    }
    protected override void OnShown(EventArgs e)
    {
    this.Text = "Form Controler";
    }
    protected override void OnClosed(EventArgs e)
    {
    this.Dispose();
    }
    }
    }


    و ازش تو فرم دوم به این شکل استفاده کردم :
    public partial class Form2 : FormControl
    {
    privatelong[] a = newlong[10000000];
    public Form2()
    {
    InitializeComponent();

    }
    }


    این کلاس توش نبود؟
    با این حالت تا فرم بسته بشه کل کلاس Dispose میشه و دیگه نباید تو حافظه باشه، درسته؟

  29. #29

  30. #30
    سلام.
    نه سار کدت جواب نداد. چرا خودتون کدها رو قبل گذاشتن تست نمیکنید؟ خودتم میتونستی چک کنی ببینی رم آزاد نمیشه.

    برمودا من که لنگ این نیستم که رم مدیریت میشه یا نه. برای کار من حتما باید بعد از بسته شدن فرم رم آزاد شه.

  31. #31
    کاربر دائمی آواتار silentrise
    تاریخ عضویت
    مهر 1386
    محل زندگی
    Tehran
    پست
    147
    سلام
    ظاهرا این پیج مطالب مفیدی داره در مورد GC صحبت میکنه فکر کنم به خوندنش بارزه!
    باسپاس
    فایل های ضمیمه فایل های ضمیمه

  32. #32
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    نقل قول نوشته شده توسط Payman62 مشاهده تاپیک
    سلام.
    نه سار کدت جواب نداد. چرا خودتون کدها رو قبل گذاشتن تست نمیکنید؟ خودتم میتونستی چک کنی ببینی رم آزاد نمیشه.

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

    در مورد GC هم مثال خود MSDN خیلی جالبه
    http://msdn2.microsoft.com/en-us/library/system.gc.aspx

  33. #33
    کاربر دائمی آواتار silentrise
    تاریخ عضویت
    مهر 1386
    محل زندگی
    Tehran
    پست
    147
    سلام
    دوست عزیز اگه میشه در مورد این مثال MSDN توضیح بدین چون این هم ظاهرا رم رو خالی نمیکند
    باسپاس

  34. #34
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    شما با چه نوع تستس از خارج شدن کلاستون از رم مطلع می شید.
    ممکنه کدی قرار بدیدی که حافظه رو قبل از ساخت یک کلاس و بعد از Dispose کردن اون مشخص کنه؟

  35. #35
    سلام.
    با همون یه آرایه long میشه فهمید دیگه. وقتی رم اشغالی 100 مگ افزایش پیدا میکنه و بعد از بستن فرم و همه اون کارها باز هم رم اشغاله معلومه که آزاد نشده.

  36. #36
    VIP آواتار Amir Oveisi
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    هر جا که حال کنم - فعلا یزد
    پست
    2,604
    ولی چرا دفعه دوم که فرو 2 رو اجرا میکنی باز هم همون 100 مگ میمونه؟ اگه اونجوری که شما میگین باشه باید با هر بار اجرای فرم 2 100 مگ دیگه هم اشغال شه ولی اینطور نمیشه
    در واقع GC با تشخیص این موضوع که اون 100 مگ واسه برنامه شما بوده و دیگه احتیاجی نیست بهش جای همونو میده به اون 100 تای جدید.
    ظاهرا هم نمیشه کاریش کرد

  37. #37

  38. #38
    سلام.
    همیشه این جوری نیست که همون 100 مگ رو بده. بعضی اوقات هم 100 مگ جدید میده و 200 مگ افزایش پیدا میکنه.
    بعد هم من کاری ندارم دفعه دوم که فرم باز میشه 100 مگ جدید میده یا نه. واسه من مهمه که بعد از بستن فرم رم آزاد شه. حالا شاید اصلا دیگه فرم رو باز نکنم. ولی رم باید آزاد شه. ولی نمیشه.
    عجب مشکل عجیبیه ها. یه رم آزاد کردن که باید جز ساده ترین ویژگی های برنامه باشه تو .net 2005 انجام نمیشه.

  39. #39
    سلام.
    نه من قبلا تست کردم.
    GC.Collect(); هم مشکلو حل نمیکنه.

  40. #40

صفحه 1 از 2 12 آخرآخر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •