我使用ZipOutputStream从数据库中获取文件,压缩并下载(围绕400mb的压缩文件)。在此期间,我的应用程序池内存上升到1.4gb,在下载完成后,它下降到1gb,而它应该回到100 mb或其他什么地方。只有10个用户使用这个应用程序,只有1个用户使用这个特定的页面。我正在调用dispose方法。我也尝试过显式地调用GC.Collect,但仍然没有用。我是不是漏掉了什么?
提前谢谢。
Dim zipStream = New ZipOutputStream(HttpContext.Current.Response.OutputStream)
Try
da.Fill(ds)
For Each dr As DataRow In ds.Tables(0).Rows
Try
Dim docName As String = ""
strImgID = dr("image_id")
If Not IsDBNull(dr("loan_number")) Then iLoanID = dr("loan_number")
If Not IsDBNull(dr("document_name")) Then docName = dr("document_name")
Dim ext As String = dr("image_type_extension")
Dim strFinalFileName As String = ""
strFinalFileName = docName & "_" & iLoanID & ext
Dim b As Byte() = dr("image_binary")
Dim fileEntry = New ZipEntry(Path.GetFileName(strFinalFileName))
zipStream.PutNextEntry(fileEntry)
zipStream.Write(b, 0, b.Length)
Catch ex As Exception
LogError(ex, iLoanID & "," & strImgID)
AddError(sb, ex, iLoanID & "," & strImgID)
End Try
Next
Catch ex As Exception
Throw
Finally
zipStream.Close()
zipStream.Dispose()
cmd.Connection.Close()
cmd.Connection.Dispose()
End Try发布于 2011-12-02 00:30:19
您需要将数据分块到流中,而不是一次分配所有数据。
例如(在c#中)
byte[] buffer = new byte[4096];
FileStream readFs = File.OpenRead(strFile);
for (int rnt = readFs.Read(buffer, 0, buffer.Length);
rnt > 0;
rnt = readFs.Read(buffer, 0, buffer.Length))
{
zipoutputstream.Write(buffer, 0, rnt);
}我想这会帮助你解决记忆问题。如果没有,请回复..
https://stackoverflow.com/questions/8344681
复制相似问题