ZipOutputStream内存泄漏

时间:2011-12-01 16:23:34

标签: asp.net vb.net application-pool

我使用ZipOutputStream从db获取文件,压缩到zip并下载(400mb左右的zip文件)。 在此期间,我的应用程序池内存最高为1.4gb,下载完成后,当它应该回到1gb或类似内容时,它会降至100 mb。 只有10个用户使用此应用程序,只有1个用户使用此特定页面。  我正在调用处理方法。我也试着明确地打电话给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

1 个答案:

答案 0 :(得分:2)

您需要将数据块化到流中,而不是一次性分配所有数据。

E.g。 (在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);
}

我认为这有助于解决你的记忆问题。如果不是,请回复。