首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将GetResponseStream写入文件需要很长时间

将GetResponseStream写入文件需要很长时间
EN

Stack Overflow用户
提问于 2012-12-21 17:11:53
回答 1查看 335关注 0票数 0

我制作了一个SSRS批量报告器,它使用HTTPWebRequest和HTTPWebResponse查询来自SSRS的报告,以获得流并将其保存为文件。

然而,客户抱怨说这花了很长时间。我已经测试过了,这个函数需要+- 15.5秒。如果我在GetResponseStream和文件写入器之间插入一个断点,在进入下一部分之前等待大约3秒,那么总时间会减少4秒吗?

有谁能解释一下这一点,或者给出一些建议,让它更快一点?

这是函数:

代码语言:javascript
复制
 Public Function ExportReport(ByVal QueryStringParameters As String, ByVal FileName As String) As String
    Dim PDFName As String = ReportFolderPath & FileName & ".pdf"
    'Create a http request or connecting to the report server.
    Dim ReportHTTPRequest As HttpWebRequest = Nothing
    'Create a http response to catch the data stream returned from the http request.
    Dim ReportHTTPResponse As HttpWebResponse = Nothing
    'Create a stream to read the binary data from the http reponse.
    Dim ReportStream As Stream = Nothing
    Dim ReportFileStream As FileStream = Nothing
    'Create an array of bytes to get the binary data from the stream.
    Dim ReportBytes As Byte()
    Dim ReportBuffer As Integer = 204800
    Dim ReportBytesRead As Integer = 0


    'Create a webrequest to get the report with all the report parameters included.
    ReportHTTPRequest = WebRequest.Create(ReportServerURL & QueryStringParameters)
    ReportHTTPRequest.Credentials = CredentialCache.DefaultCredentials
    'Get the response from the request.

    ReportHTTPResponse = ReportHTTPRequest.GetResponse()

    'Read the binary stream from the http response.
    ReportStream = ReportHTTPResponse.GetResponseStream()

    ReportBytes = New Byte(ReportBuffer) {}
    ReportBytesRead = ReportStream.Read(ReportBytes, 0, ReportBuffer)
    ReportFileStream = New FileStream(PDFName, FileMode.Create)
    Do While ReportStream.CanRead And ReportBytesRead > 0
        ReportFileStream.Write(ReportBytes, 0, ReportBytesRead)
        ReportBytesRead = ReportStream.Read(ReportBytes, 0, ReportBuffer)
    Loop

    ReportHTTPResponse.Close()
    ReportStream.Close()
    ReportFileStream.Close()

    Return PDFName
End Function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-29 01:56:20

一个对我有效的神奇方法,尝试使用32768的缓冲区大小

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

https://stackoverflow.com/questions/13987194

复制
相关文章

相似问题

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