SqlDataReader и OutOfMemoryException
От: LoStar-s  
Дата: 05.09.07 12:07
Оценка:
reader = command.ExecuteReader();
byte[] buffer = new byte[ReadBufferLength];
                    
if (reader.Read() && !reader.IsDBNull( 0 ) ) 
{
   long i = 0;
   int cBytes = 0;
   do
   {
        cBytes = (int)reader.GetBytes( 0, i, buffer, 0, buffer.Length );
        i += cBytes;
        stream.Write( buffer, 0, cBytes );
   } while ( cBytes == buffer.Length );
}

Пытаюсь читать из базы 160 мегабайтный файл. Приведенный выше код падает с ошибкой OutOfMemoryException. ReadBufferLength рассчитан на чтение 1 Мб за раз. 5 раз тело цикла do-while выполняется корректно, на шестой падает.(на другой машине все время разное количество выполненных циклов, от 3 до 9) Кто сталкивался с таким? Как можно исправить?

   в System.Data.SqlTypes.SqlBinary.get_Value()
   в System.Data.SqlClient.SqlDataReader.GetBytesInternal(Int32 i, Int64 dataIndex, Byte[] buffer, Int32 bufferIndex, Int32 length)
   в System.Data.SqlClient.SqlDataReader.GetBytes(Int32 i, Int64 dataIndex, Byte[] buffer, Int32 bufferIndex, Int32 length)
Re: SqlDataReader и OutOfMemoryException
От: Andir Россия
Дата: 05.09.07 13:26
Оценка:
Здравствуйте, LoStar-s, Вы писали:


LS>Пытаюсь читать из базы 160 мегабайтный файл. Приведенный выше код падает с ошибкой OutOfMemoryException. ReadBufferLength рассчитан на чтение 1 Мб за раз. 5 раз тело цикла do-while выполняется корректно, на шестой падает.(на другой машине все время разное количество выполненных циклов, от 3 до 9) Кто сталкивался с таким? Как можно исправить?


ExecuteReader(CommandBehavior.SequentialAccess) ? Хотя, конечно, OutOfMemoryException — это странно.

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 743 ) { /* Работаем */ }
Re: SqlDataReader и OutOfMemoryException
От: AlexZu Россия  
Дата: 05.09.07 14:27
Оценка:
Здравствуйте, LoStar-s, Вы писали:

Если .NET v1.1 то там был баг, связанный с выделением памяти, см. напр. здесь
Автор: Nikolay_P_I
Дата: 28.06.05
. Лечится установкой сервис пака или переходом на .NET v2.
Re[2]: SqlDataReader и OutOfMemoryException
От: LoStar-s  
Дата: 07.09.07 13:40
Оценка:
Нет, используется .Net v 2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.