System.OutOfMemory (c# + sql server)
1 отговора
145 прегледа
System.OutOfMemory (c# + sql server)
За съжаление не мога да опиша цялата среда защото се използват поне десетина търд парти сървиси и оле дб провайдъри но четох постинги за подобна грешка и без цялата камара сървиси така че си мисля че причината не е в тях.
Ситуацията е следната:
имам multithread readers които четат прости типове данни и картинки (ей това минава например през къстъм оле дб) на страници в един локален дейтасет
имам multithread writers които като видят че има порция (например 300) от редове достатъчни да се пише файл правят едни мулти пейдж тиф файлове.
след като мина 4 различни типа тестване това нещо е лайв в момента и се справя безупречно почти всеки ден.
Проблема се появява някаде около ред 500 000 - System.OutOfMemory в един Рийд метод.
Момчетата от МС се скъсват да твърдят че туй нещо в .нет не може да стане и добре че по разни не особено свързани теми успях да разбера че това може да е не заради самата памет а щото е свършила само част от нея например парчето отделено за файл хендлърс или стак хендлърс.
препоръката беше да се викне Dispose за всички IDisposable обекти ама аз имам само един и му го викам. Обаче като наближи ред 490хил-500хил някаде и пак си гърми.
За справка със 450000 реда си минава като пич.
Някой да е имал подобно изживяване?
Мерси ;)
marching on together [линк]
Ситуацията е следната:
имам multithread readers които четат прости типове данни и картинки (ей това минава например през къстъм оле дб) на страници в един локален дейтасет
имам multithread writers които като видят че има порция (например 300) от редове достатъчни да се пише файл правят едни мулти пейдж тиф файлове.
след като мина 4 различни типа тестване това нещо е лайв в момента и се справя безупречно почти всеки ден.
Проблема се появява някаде около ред 500 000 - System.OutOfMemory в един Рийд метод.
Момчетата от МС се скъсват да твърдят че туй нещо в .нет не може да стане и добре че по разни не особено свързани теми успях да разбера че това може да е не заради самата памет а щото е свършила само част от нея например парчето отделено за файл хендлърс или стак хендлърс.
препоръката беше да се викне Dispose за всички IDisposable обекти ама аз имам само един и му го викам. Обаче като наближи ред 490хил-500хил някаде и пак си гърми.
За справка със 450000 реда си минава като пич.
Някой да е имал подобно изживяване?
Мерси ;)
marching on together [линк]
Re: System.OutOfMemory (c# + sql server)
Първо провери обичайните заподозрени. Предполагам, че си сторил и все пак.
1. С PerfMon виж дали все пак наистина не ядеш мемори или ханделс.
2. Знаеш ли точно на кой ред гърми?
3. Ако ти виси съпорта на главата можеш превантивно се рестартираш в удобен момент.
4. Това число 500 000 можеш ли да постигнеш в тестова обстновка?
5. Моите подозрения са върху 3рд парти компоненти, ако е истина => т.3,
Моя опит е по различен - при мен наистина си беше валиден оутофмемори. Имах Windows Service - вътре много тредове. Лимита на процес е 1.7 гб при нормални условия. Също има проблеми когато свърши РАМ и почнеш да ползваш виртуална памет. За това преди да почна нов итем си проверявам праметрите на системата и стартирам нов процес със съответните параметри.
Нестата са по предвидими
1. С PerfMon виж дали все пак наистина не ядеш мемори или ханделс.
2. Знаеш ли точно на кой ред гърми?
3. Ако ти виси съпорта на главата можеш превантивно се рестартираш в удобен момент.
4. Това число 500 000 можеш ли да постигнеш в тестова обстновка?
5. Моите подозрения са върху 3рд парти компоненти, ако е истина => т.3,
Моя опит е по различен - при мен наистина си беше валиден оутофмемори. Имах Windows Service - вътре много тредове. Лимита на процес е 1.7 гб при нормални условия. Също има проблеми когато свърши РАМ и почнеш да ползваш виртуална памет. За това преди да почна нов итем си проверявам праметрите на системата и стартирам нов процес със съответните параметри.
Нестата са по предвидими