نمایش نتایج 1 تا 17 از 17

نام تاپیک: این خطا برای چیه ؟

  1. #1

    این خطا برای چیه ؟

    با سلام.
    از دوستان کسی تاحالا با این خطا برخورد کرده.
    میشه بگید این ارور مال چیه؟

    Exception of type System.OutOfMemoryException was thrown.

  2. #2
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    احتمالاً درخواستی برای ساخت شی ای داده اید که حافظه زیادی میگیرد و سیستم بهه اندازه آن RAM خالی ندارد!
    کارهای بزرگتان را به بلوک های کوچک تر بشکنید.

  3. #3
    شی بزرگ مثلا چی؟تو این برنامه بزرگترین چیز کانکشنه که اونم پول شده
    چیز دیگه ای به نظرتون میرسه؟

  4. #4
    چه زمانی با این خطا برخورد می کنی؟

    اگر کد خاصی باعث بروز این خطا میشه، با حذف تدریجی کدها میتونی به علت دقیق بروز مشکل پی ببری..

  5. #5
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    من هم تکرار میکنم! چه زمانی با این خطا برخورد می کنید؟ در کدام خط؟ (برنامه را Debug کنید.)

    اگر با بانک اطلاعاتی کار میکنید، تقریباً اطمینان دارم که اقدام به بارگذاری یک DataSet با تعداد خیلی زیادی سطر را کرده اید، منابع سرور که به یک کاربر سایت شما اختصاص می یابد معمولاً خیلی کمتر از رایانه شخصی است، در این حال برنامه در رایانه شخصی مشکلی ندارد ولی وقتی به سرور میرود به خطا میخورد!

    به فرض آنکه حدسم در مورد پر کردن DataSet درست باشد، پیشنهاد میکنم:
    تعداد سطرهای لود شده را کاهش دهید، مثلاً نه از نظر وجحه کاربرپسندی و نه از جهت اصول نرم افزاری درست نیست که شما که در یک زمان 3000 سطر اطلاعات را به کاربر نشان دهید!
    صفحه بندی کنید و در هر صفحه حداکثر 100 قلم را نشان دهید.

  6. #6
    دوست عزیزم.اصلا دیتا ستی وجود نداره،و شاید 100 سطر هم بایند نمیشه.موردی دیگه ای رو احتمال نمیدید؟

  7. #7
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    اینطوری نمیشود! باید قسمتی از کد را که باعث این مشکل میشود، اینجا بگذارید!
    بحرحال خطا، خطای سرریز RAM است و کدهای شما در مصرف RAM صرفه جویی نمیکنند!!

  8. #8


    public string showOther(int id,string NewsID)
    {
    string retStr = "";
    DataTable dt = new DataTable();
    string com = "SELECT top 4 * FROM News WHERE active=1 and (sDay <= DATEDIFF(hh, '2007-03-21', GETDATE())) and catID="+id.ToString()+"and NewsID<>'"+NewsID.ToString()+"'"+"ORDER BY catPriority DESC";
    (new SqlDataAdapter(com,db.sqlCon)).Fill(dt);
    for(int i=0;i<dt.Rows.Count;i++)
    {
    retStr += "<a class=Link3 href=viewNews.aspx?ID="+dt.Rows[i]["NewsID"].ToString()+"&cat="+id.ToString()+">";
    retStr += dt.Rows[i]["NewsTitle"].ToString();
    retStr += "</a><br>";
    }
    db.disconect();
    return retStr;
    }



    این کد داخل صفحه هست
    فکر نمیکنم اینقدر حافظه رو اشغال کنه که همچین ارروری بده.

  9. #9
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    کمی وقت دهید با دقت بیشتری بررسی کنم، ولی یک سوال کوچک نوع فیلد NewsID و NewsTitle چیست؟ (String یا Integer) میتواند Null باشد یا نه؟؟
    فیلد NewsTitle چه طور؟

    ضمناً دستورات SQL تان کمی آشفته است و به نظر در بعضی جاها مشکل دارد، شاید هم در اینجا آمده این طوری شده؟؟!

    و یک پیشنهاد، شما در کد فوق نیازی به datatable ندارید!! خودتانت مستقیاً از dataReader بخوانید، برای کد شما هم خیلی آسان تر و روانتر است و هم فوق العاده پر سرعت و هم به مقدار بسیار ناچیزی از RAM استفاده میکند، یعنی از هر لحاظ مرقون به صرفه است.

    ضمناً شاید دیگر امروز نتوانم بیام این ور نت!!!

  10. #10
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    چون PM زده بودید، گفتم همین امروز یه کاریش کنم!!!
    مثلاً کدهای زیر را تست کنید و ببینید جواب میدهد (هنوز به دانستن نوع فیلدها نیاز دارم)


    public static string showOther(int id, string NewsID)
    {
    string retStr = "";
    using (System.Data.SqlClient.SqlConnection dbCon = new System.Data.SqlClient.SqlConnection("ConnectionString"))
    {
    using (System.Data.SqlClient.SqlCommand dbCom = new System.Data.SqlClient.SqlCommand("SELECT TOP 4 * FROM [News] WHERE ([active]=1 AND [catID]= @catID AND NewsID<>@NewsID) ORDER BY [catPriority] DESC", dbCon))
    {
    dbCom.Parameters.AddWithValue("@catID", id);
    dbCom.Parameters.AddWithValue("@NewsID", NewsID);

    dbCon.Open();
    using (System.Data.SqlClient.SqlDataReader dbDr = dbCom.ExecuteReader())
    {
    int iOrdinal_NewsID = dbDr.GetOrdinal("NewsID");
    int iOrdinal_NewsTitle = dbDr.GetOrdinal("NewsTitle");
    string strID = id.ToString();

    while (dbDr.Read)
    {
    retStr +=
    "<a class=Link3 href='viewNews.aspx?ID=" + dbDr.GetString(iOrdinal_NewsID) + "&cat=" + strID + "'>" +
    dbDr.GetString(iOrdinal_NewsTitle) +
    "</a><br/>";
    }
    }
    }
    }
    }


    البته به علت کمی وقت سریع نوشتم، امیدوارم اشتباه تابلویی نداشته باشد!
    لطفاً تست کنید و جواب دهید. (علاوه بر جواب نوع فیلدها)
    اما در کل کدی شبیه این بسیار سریعتر اجرا میشود، فوق العاده سریع و با مصرف خیلی کم حافظه.

    (گرچه به نظر میرسد مشکل کد شما از RAM نبوده!)

    موفق و پیروز باشید.

  11. #11
    اگر کد دوستمون جواب نداد به جای String از کلاس StringBuilder استفاده کنید ببینید درست میشه ؟

  12. #12
    فیلد newsID از نوع integer هست و بقیه nvarchar و اجازه خالی درج شدن هم ندارند.

  13. #13
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    نقل قول نوشته شده توسط brida_kh مشاهده تاپیک
    فیلد newsID از نوع integer هست و بقیه nvarchar و اجازه خالی درج شدن هم ندارند.
    مطمئن هستید برعکس نگفتید؟؟؟؟ دقت کنید!
    اتفاقاً در برنامه کاملاً برعکس است، فیلد newsID یک string است و catID عددی است!!!

    اگر اینطور باشد، ایراد از نوع نادرست داده های شماست.


    نقل قول نوشته شده توسط azmoodeh مشاهده تاپیک
    اگر کد دوستمون جواب نداد به جای String از کلاس StringBuilder استفاده کنید ببینید درست میشه ؟
    مشکل ایشان که از RAM نیست ولی تقریباً اطمینان دارم، از نظر سرعت و مصرف RAM نوع داده های String بسیار بهتر است، این یکی از انواع اصلی متغییرها در دات نت است و بدون شک بهینه سازی های خوبی روی آن انجام شده

  14. #14
    دوست عزیز این داده ها با همان نوعی که گفتم در دیتا بیس ذخیره شدند اما موقع select تبدیل به String کردم.ممکنه این موضوع مشکل ساز بشه؟

  15. #15
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    پس لطفاً این دستورات را تست کنید! و ببینید کار میکند یا نه؟؟؟؟؟؟؟

    public static string showOther(int id, string NewsID)
    {
    string retStr = "";
    string strID = id.ToString();

    using (System.Data.SqlClient.SqlConnection dbCon = new System.Data.SqlClient.SqlConnection("ConnectionString"))
    {
    System.Data.SqlClient.SqlCommand dbCom = new System.Data.SqlClient.SqlCommand("SELECT TOP 4 * FROM [News] WHERE ([active]=1 AND [catID]= @catID AND NewsID<>@NewsID) ORDER BY [catPriority] DESC", dbCon);

    dbCom.Parameters.AddWithValue("@catID", strID);
    dbCom.Parameters.AddWithValue("@NewsID", System.Convert.ToInt32(NewsID));

    dbCon.Open();
    using (System.Data.SqlClient.SqlDataReader dbDr = dbCom.ExecuteReader())
    {
    int iOrdinal_NewsID = dbDr.GetOrdinal("NewsID");
    int iOrdinal_NewsTitle = dbDr.GetOrdinal("NewsTitle");
    while (dbDr.Read())
    {
    retStr +=
    "<a class='Link3' href='viewNews.aspx?ID=" + dbDr.GetInt32(iOrdinal_NewsID).ToString() + "&cat=" + strID + "'>" +
    dbDr.GetString(iOrdinal_NewsTitle) +
    "</a><br/>";
    }
    }
    }
    return retStr;
    }


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

    public static string showOther(string id, int NewsID)


    منتظر نتیجه تست شما هستم.
    موفق باشید.

  16. #16
    نقل قول نوشته شده توسط __H2__ مشاهده تاپیک
    سلام

    مطمئن هستید برعکس نگفتید؟؟؟؟ دقت کنید!
    اتفاقاً در برنامه کاملاً برعکس است، فیلد newsID یک string است و catID عددی است!!!

    اگر اینطور باشد، ایراد از نوع نادرست داده های شماست.



    مشکل ایشان که از RAM نیست ولی تقریباً اطمینان دارم، از نظر سرعت و مصرف RAM نوع داده های String بسیار بهتر است، این یکی از انواع اصلی متغییرها در دات نت است و بدون شک بهینه سازی های خوبی روی آن انجام شده
    دوست عزیز ، توابع موجود در StringBuilder برای کار با حجم رشته ای زیاد طراحی شدند ، تا حالا فکر کردید اگر String بهتر بود پس چرا دیگه StringBuilder استفاده می شه ؟!؟؟! این کلاس به همین منظور که عرض کردم طراحی شده


    این هم یه لینک از سایت مایکروسافت در این مورد

    http://msdn2.microsoft.com/en-us/lib...ngbuilder.aspx


    البته این همه موضوع رو به StringBuilder مربوط نکنیم.من هم گفتم ممکنه از این باشه ، چون Performance کلاس StringBuilder بیشتر هست

    موفق باشید

  17. #17
    یه مسئله دیگه ای هم هست.
    همین برنامه روی یه سرور دیگه 6 ماهه داره درست کار میکنه.من فقط میخواستم یه بک آپ دیگه هم داشته باشم که اینطور شد

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

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