首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZipOutputStream MemoryLeak

ZipOutputStream MemoryLeak
EN

Stack Overflow用户
提问于 2011-12-02 00:23:34
回答 1查看 896关注 0票数 0

我使用ZipOutputStream从数据库中获取文件,压缩并下载(围绕400mb的压缩文件)。在此期间,我的应用程序池内存上升到1.4gb,在下载完成后,它下降到1gb,而它应该回到100 mb或其他什么地方。只有10个用户使用这个应用程序,只有1个用户使用这个特定的页面。我正在调用dispose方法。我也尝试过显式地调用GC.Collect,但仍然没有用。我是不是漏掉了什么?

提前谢谢。

代码语言:javascript
复制
  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
EN

回答 1

Stack Overflow用户

发布于 2011-12-02 00:30:19

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

例如(在c#中)

代码语言:javascript
复制
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);
}

我想这会帮助你解决记忆问题。如果没有,请回复..

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8344681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档