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)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.