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)
Здравствуйте, 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 ) { /* Работаем */ }
Здравствуйте, LoStar-s, Вы писали:
Если .NET v1.1 то там был баг, связанный с выделением памяти, см. напр.
здесьАвтор: Nikolay_P_I
Дата: 28.06.05
. Лечится установкой сервис пака или переходом на .NET v2.