我使用Asp.net,.net 3.5,win2003,iis 6.0。使用BZip2(SharpZipLib)的OutOfMemoryException
我使用Oracle收集文件,在表Oracle中的字段RAW中以SharpZipLib.BZip2壓縮格式保存文件。
我的應用程序是Web,我使用WCF服務來獲取文件的數據(字節數組)。 aspx頁面將文件發送給用戶(下載文件)。
我的問題,問題:
我從Oracle讀取數據,(我打電話WCF服務)。我得到的字節數組(byte []),
我嘗試解壓縮文件使用SharpZipLib.BZip2
using (MemoryStream inData = new MemoryStream(data))
{
using (MemoryStream outData = new MemoryStream())
{
BZip2.Decompress(inData, outData); //<==================== Fails here OutOfMemoryException
return outData.ToArray();
}
}
錯誤是因爲文件 「解壓縮」 是大,非常大(> 500 MB)! !
壓縮文件:4MB
解壓縮文件:> 500 MB
我做的測試是這樣的:
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.Decompress
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();
}
}
}
}
任何建議,意見,示例源代碼的代碼?
requeriments,我寧願避免寫入文件:(添加更多的服務器內存是不可能的。 – Kiquenet 2010-07-30 09:33:24
那麼你是F * cked。嘗試使用更少的內存密集型的解壓縮算法。如果添加更多的內存是個問題,我懷疑你有辦法更大的問題.... – leppie 2010-07-30 10:05:51
任何其他的解決辦法,好嗎? – Kiquenet 2015-06-30 08:14:05