Я использую Asp.net, .net 3.5, win2003, iis 6.0.
Я использую Oracle для сбора файлов, сохранив файл в SharpZipLib. Сжатый формат BZip2 в поле RAW в таблице Oracle.
Мое приложение является сетью, и я использую Сервис WCF для, получают данные (массив байтов) файла. aspx страница отправляет, файл пользователю (загрузите файл).
Моя проблема проблемы:
Я считал ДАННЫЕ с Oracle, (я призываю к Сервису WCF). Я получаю массив байтов (байт []),
Я пробую, Распаковывают использование файла SharpZipLib. BZip2
using (MemoryStream inData = new MemoryStream(data))
{
using (MemoryStream outData = new MemoryStream())
{
BZip2.Decompress(inData, outData); //<==================== Fails here OutOfMemoryException
return outData.ToArray();
}
}
ошибка состоит в том, потому что "несжатый" файл является большим, очень большим (> 500 МБ)!!!
сжатый файл: 4 МБ
несжатый файл:> 500 МБ
Я действительно тестирую как это:
BufferedStream bufin = new BufferedStream(instream);
using (MemoryStream outData = new MemoryStream())
{
BZip2.Decompress(bufin, outData);
return outData.ToArray();
}
Но я получаю тот же OutOfMemoryException
Стопка трассировки исключения
en System.IO.MemoryStream.set_Capacity(Int32 value)
en System.IO.MemoryStream.EnsureCapacity(Int32 value)
en System.IO.MemoryStream.WriteByte(Byte value)
en Reale.Frk.Compression.BZip2.BZip2.Decompress(Stream inStream, Stream outStream)
Код SharpZipLib. BZip2. Распаковка
public static void Decompress(Stream inStream, Stream outStream)
{
if ( inStream == null ) {
throw new ArgumentNullException("inStream");
}
if ( outStream == null ) {
throw new ArgumentNullException("outStream");
}
using ( outStream ) {
using ( BZip2InputStream bzis = new BZip2InputStream(inStream) ) {
int ch = bzis.ReadByte();
while (ch != -1) {
outStream.WriteByte((byte)ch);
ch = bzis.ReadByte();
}
}
}
}
какие-либо предложения, комментарии, демонстрационный исходный код?
Пропустить MemoryStream
и записать непосредственно в файл.
Иначе добавьте больше памяти к серверу.
Другой вариант для указания начальной емкости для MemoryStream
.