【问题标题】:Running code upon Response.TransmitFile completion在 Response.TransmitFile 完成时运行代码
【发布时间】:2010-11-21 10:10:13
【问题描述】:

我正在使用 Response.TransmitFile 从 Web 服务中检索文件。我想从服务器的角度来衡量这个过程所花费的时间。

我尝试在此调用之前和之后获取滴答计数,但这显然不代表传输花费了多长时间。对于 30 MB 的文件,它给了我像 0.0016 毫秒这样的数字。 :-)

有什么想法吗?

【问题讨论】:

    标签: c# asp.net transmitfile


    【解决方案1】:

    正如您所见,传输是异步的。

    您可以通过在调用TransmitFile 之前关闭 HttpResponse (Response.Buffer = false) 中的缓冲来获得所需的内容。如果失败,那么transmit it "manually" and synchronously, using FileStream

    如果你只想观察传输所需的时间,只是为了你的信息,而不需要在你的应用程序中记录时间,你可以用 Fiddler 来做。

    【讨论】:

    • AFAIK,TransmitFile 将传输交给 IIS/Kernel 以获得更高的性能,因此离开它会在服务器端产生显着的性能损失。 Fiddler 是来自客户端的一个很好的建议。可能有一种方法可以启用 IIS 日志记录或其他功能来对 TransmitFile API 进行基准测试。
    • response.buffering 属性会影响 TransmitFile 调用吗?根据 MSDN “[TransmitFile] 将指定文件直接写入 HTTP 响应输出流,而不将其缓冲在内存中。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多