تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 7 از 7

نام تاپيک: مشکل با out of memory exception

  1. #1
    داره خودمونی میشه
    تاريخ عضويت
    Dec 2011
    پست ها
    26

    پيش فرض مشکل با out of memory exception

    با سلام به دوستان
    یه مشکل عجیب تو پروژه ای که نوشتم پیدا کردم , بعد از باز شدن چند تا فرم پیغام out of memory exception مواجه میشم در حالی که کلی حافظه و سی پی یو دارم , این مشکل روی یکی از کامپیوتر مشتری ها به وجود اومده اما به نظرم روی هر کامپیوتری ممکنه بوجود بیاد , کسی میدونه مشکل از کجاست ؟ اگه دقیق راهنمایی کنین ممنون میشم

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    چند وقت قبل دوستی مشکلی مشابه داشت که موارد زیر را به ایشان پیشنهاد کردم:

    نقل قول نوشته شده توسط _H2_
    در مورد خطا مد نظرتان مطلب دقیقی نمیتوانم بیان کنم، فقط میتوانم یک سری پیشنهاد کلی برایتان مطرح کنم:

    - شما میتوانید با TaskManager و PerformanceMonitor برنامه ها را زیر نظر بگیرید و ببینید دقیقاً چه exe ای مصرف نا متعارفی دارد و مدام حافظه بیشتری مصرف میکند.

    - این خطا میتوانید بعلت بی دقتی در کدنویسی خود برنامه هم باشد (نشت حافظه)، شما باید تلاش کنید که تا حدامکان اشیایی را که قابلیت IDisposable در اولین فرصت ممکن نابود کنید.
    (مثلاً اگر مدام یک DataSet یا Bitmap و... تولید و جای قبلی می ریزید، سعی کنید مقدار قبلی را Dispose کنید)

    - در تعریف اشیا فوق مثل (Connection و DataSet و Bitmap و...) تا حد امکان از دستورات Using یا Dispose در انتهای مصرف استفاده کنید.

    - قبل از انجام اعمال سنگین بارگذاری در RAM (مثل پرکردن یک DataSet بزرگ) از دستور GC.Collect استفاده کنید.

    - برنامه را طوری اصلاح کنید که نیاز نباشد کل یک جدول را در خروجی آن نمایش دهید.
    مثلاً SELECT * FROM tablename دستور جالبی برای اجرا در یک برنامه صنعتی نیست!
    (بعنوان نمونه ما در برنامه خودمان کامل سیستم صفحه بندی را داریم و هیچ زمان یک گراید کل یک جدول را بارگذاری و نمایش نمیدهد)

    - در چاپ های سنگین هم میتوانید تنظیمات را یکبار از کاربر دریافت کنید (مثل چاپگر و کاغذ و...) و سپس خودتان با کدنویسی اطلاعات را در قالب 100 صفحه ، 100 صفحه درخواست داده و به برنامه گذارش ساز بدهید و دستور چاپ بدهید و سپس 100 صفحه بعدی و...
    (طبیعتاً کار خوب زحمت دارد و کدنویسی بیشتر و دقیق تری میخواهد !)

    - کلاً به هر طریقی که ارتباط سنگین با دیتابیس دارید، داشتن تفکر صفحه بندی و جریان گرایی (Stream) بهتر است ولی متاسفانه اغلب ابزار آماده به علت سادگی استفاده روی بارگذاری کل اطلاعات در RAM تاکید دارند و مانور میدهند و این در حالی است که RAM ها همواره کمتر از ظرفیت تجهیزات Harddisk ذخیره سازی دیتابیس ها هستند.

    - در طراحی اولیه جداول و انتخاب PrimaryKey ها دقت کنید و در انتخاب یا عدم انتخاب ستون هایی برای کاندید Index شدن دقت کنید.

    - برخی موارد این خطاها میتواند از مشکلات داخلی خود ابزار تولیدی مایکروسافت هم باشد.
    گرچه به تجربه من بیشتر موارد مقصر خود نحوه کدنویسی است.
    دقت کنید برنامه خارج محیط VS هم خطا میدهد یا نه.
    و در نهایت مایکروسافت مدام پک های بروزرسانی برای Win,SqlServer,VS,Framework و... ارائه میدهد...
    تلاش کنید سیستم تان را بروز نگاه دارید.

    - هرچقدر هم RAM و منابع آزاد زیاد داشته باشید، بازهم مصرف زیاد این منابع را بی اثر می کند.
    در اغلب رایانه های دوستان که دقت میکنم، تعداد بسیار زیادی برنامه کاملاً بی فایده در Startup دارند.
    برنامه کمکی msconfig را اجرا ترجیحاً کلیه موارد فهرست Startup غیر فعال کنید، مطمئن باشید با غیر فعال کردن همه انها هم باز رایانه تان به خوبی کار میکنید.
    نترسید! باور کنید! یکبار تیک همه را بردارید و رایانه را ریست کنید اگر چیزی درست کار نکرد، میتوانید مجدد تیکش را بگذارید.
    (تازه این لیست فقط بخش کوچکی از اجرای بیمصرفی است که همراه سیستم عامل تان شروع میشود!)

    - ضرری ندارد سیستم تان را با یک ضدویروس بروز رسانی شده هم اسکن کنید...!

    و...
    در نهایت هم شما باید مکانیزم دقیقی برای ثبت کامل اطلاعات خطاهای احتمالی در یک فایل متنی و یا جدولی در دیتابیس داشته باشید تا بتوانید در این شرایط با مراجعه به آن logfile یا جدول دیتابیس متوجه خصایص و محل خط و دستوری که خطا در آن رخ داده و.... بشوید، فقط داشتن یک متن "out of memory exception" بدون اطلاعات اضافه مثل محل کد و... خیلی کمکی نمیکند...

    موفق باشید.

  3. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  4. #3
    داره خودمونی میشه
    تاريخ عضويت
    Dec 2011
    پست ها
    26

    پيش فرض

    ممنون دوست عزیز , این مشکل روی کامپیوتر خودم بوجود نیومده و روی کامپیوتر دیگه ای هستش , واسه همین نمیدونم خطا کجا رخ میده و کدوم کد مشکل داره چون فایل کامپایل شده اینن مشکل بوجود اومده , ممکنه بگین متد dispose کجا و برای چه اشیایی باید به کار بره ؟ ممنون

  5. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ممکنه بگین متد dispose کجا و برای چه اشیایی باید به کار بره ؟
    توضیحاتی در پست پنجم تاپیک زیر داده ام ...
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]


    نمیدونم خطا کجا رخ میده
    !
    حداقل حداقل حداقل یک try-catch در main اضافه کنید تا با نمایش اطلاعاتش از محل کد اطلاع دقیق تری بدست آورید.

  6. #5
    پروفشنال
    تاريخ عضويت
    Nov 2007
    پست ها
    546

    پيش فرض

    به نام خدا
    با سلام
    بنده هم همین مشکل رو دارم؛و توصیه های جناب _H2 هم متاسفانه نتونست حل کنه.
    جالب اینجاست که جدیدا وقتی می خوام فرمی رو باز کنم هم همین خطا رو میده؛ قبل از اینکه تو اجرا بگیرم.
    رم سیستمم هم 4.
    با سپاس

  7. #6
    پروفشنال
    تاريخ عضويت
    Nov 2007
    پست ها
    546

    پيش فرض

    با سلام
    قبلا مطلبی جناب H2 فرموده بودن و فراموش کرده بودم انجام بدم و اون اینکه ویندوزم رو 64 بیتی کنم ولی بنده فراموش کرده بودم.
    در حال حاضر ارور مذکور رو نمیده ولی وقتی میخوام پروژه رو با از .Net reactor یا نرم افزارهای دیگه ای محافظتی؛ محافظت کنم. همین خطا رو میده.
    با سپاس

  8. #7
    پروفشنال
    تاريخ عضويت
    Nov 2007
    پست ها
    546

    پيش فرض

    قبل از انجام اعمال سنگین بارگذاری در RAM (مثل پرکردن یک DataSet بزرگ) از دستور GC.Collect استفاده کنید.
    با سلام
    در خیلی از سایت ها دیدم که گفته شده بود که از دستور فوق استفاده نکنیم.
    می خواستم بدونم اگه بخواهیم به صورت درست از دستور فوق استفاده کنیم که بدون اینکه بخواهیم برخی از رفرنسها رو از دست ندادیم و یا پشت صحنه اتفاق بدی نیفته باید چی کار کنیم.
    با تشکر فراوان

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •