PDA

View Full Version : مشکل با out of memory exception



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

ASKaffash
دوشنبه 02 مرداد 1391, 12:22 عصر
سلام
من قبلا وقتی روتین های Recursive داشتم به این پیام برخورد کردم منظور اینه که مثلا درون یک Event یک Property مقدار دهی شده که مجدد همین Event جاری را Call می کند

ahmad_ferdinand
دوشنبه 02 مرداد 1391, 16:58 عصر
ممنون دوست عزیز ولی من متد رکرسیو ندارم البته داخل ایونتها کدهایی نوشتم ولی اون ایونت و کال نکردم

ahmad_ferdinand
دوشنبه 02 مرداد 1391, 17:17 عصر
تو هر بار لود فرم هم gc.collect() و صدا میزنم ولی فایده ای نداره چون خود دات نت فقط روی این متد کار میکنه , دوستان راه دیگه ای به ذهنتون نمیرسه , خیلی واجبه

FastCode
دوشنبه 02 مرداد 1391, 17:56 عصر
معمولاً اگر کدتون رو بزارید زودتر به جواب میزارید.

کامبیز اسدزاده
دوشنبه 02 مرداد 1391, 19:11 عصر
شما سعی کنید مدیریت حافظه رو تو برنامتون بکار بگیرید برای حل این مشکل از نسخه های بالاتر .NET استفاده کنید در صورتی که پروژتون کانورت شده باشه این خطارو براتون حتما میده :) ۱۰۰٪ شما یا .NET سیستمتون رو دستکاری کردین و یا به احتمالی دیگر از Convert های کد و مقادیر پشت سر هم استفاده نموده اید....

در کل برنامه نویسی غیر استاندارد شامل این خطاست ! عدم مدیریت حافظه و استفاده از تبدیل مقادیر پشت سر هم.

ahmad_ferdinand
دوشنبه 02 مرداد 1391, 22:38 عصر
با تشکر از دوستان , نمیدونم مشکل از کجای کد هست که بزارم چون روی سیستم خودم این مشکل بوجود نیومده , من از دات نت 3.5 استفاده کردم و کانورت پروژه ای انجام ندادم , از متد کانورت زیاد استفاده کردم ولی خوب نیاز داشتم , در ضمن روی یه سیستم این اتفاق افتاده و بقیه مشکل نداشتن , من از برنامه نویسی لایه ای استفاده کردم و بعضی متدها کانکشن و نبستم ممکنه از اون باشه ؟ روی اون سیستمی که این مشکل بوجود اومده هم sql server نصب هستش و هم sql express و فکر کنم پردازش هر دوشون فعال باشه ممکنه از اون باشه ؟ ممنون

FastCode
سه شنبه 03 مرداد 1391, 17:20 عصر
نه.
این خطا در چند حالت به وجود میاد
حافظه ی مجازیتون(VM) از حداکثر مجاز بیشتر بشه 2 3 یا 4 گیگ در سیستم های 32-bit و عملاً نامحدود در سیستم های 64-bit
مقدار زیادی حافظه ی non-paged(فکر نمیکنم اصلاً با C#‎ بشه allocate کرد) allocate کرده باشین
تعداد زیادی ترد داشته باشین(L2+L3 Cache ه cpu رو تقسیم بر 24 KB کن, تعداد تردهایی که ویندوز میتونه بسازه به دست میاد)(فکر میکنم خطای 0xc0000005 BSoD بده)

ahmad_ferdinand
سه شنبه 03 مرداد 1391, 19:53 عصر
ممنون دوست عزیز ببینم چی کار میشه کرد