Response.Write DataTable数据到文本文件,ASP.net挂起

时间:2008-11-13 17:36:36

标签: asp.net export text-files response.write

非常奇怪的问题,因为这在我们旧的经典ASP网站上完美运行。我们基本上是查询数据库,并通过Response.Write将大约2200行文本导出到文本文件,以输出到对话框,并允许用户保存文件。

Response.Clear()         Response.ClearContent()         Response.ClearHeaders()

    Dim fileName As String = "TECH" & test & ".txt"

    Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", fileName))
    Response.ContentType = "text/plain"

    Response.Write(strHeader)

    Dim sw As New IO.StringWriter()

    Dim dtRow As DataRow
    For Each dtRow In dt3.Rows
        sw.Write(dtRow.Item("RECORD") & vbCrLf)
    Next

    Response.Write(sw.ToString)
    Response.Write(strTrailer & intRecCount)
    Response.End()

我可以使用StringWriter或只使用Response.Write(dt.Rows(i).Item(“RECORD”)。toString

无论哪种方式,Export都会对我们的开发网站造成可怕的影响。我的本地机器没有挂起,几乎是瞬间的。记录集不是很大,它写的行很小。

任何人都知道为什么会挂这个?它确实允许保存并显示文件,但它超过3-4分钟。

3 个答案:

答案 0 :(得分:2)

附加一个远程调试器并找到它挂起的位置?

你需要弄清楚它是字符串编写器循环,还是实际的查询代码(这里没有提供)。

答案 1 :(得分:0)

听起来好像你正在溢出输出缓冲区。也许在那里添加一个计数器来冲洗每几百行。

此外,Response对象基本上为您完成了StringWriter的大部分工作。使用StringWriter作为中介可能是多余的。

答案 2 :(得分:0)

使用StringWriter和DataTable都是过度的。

为什么不直接使用SqlReader从数据库中获取结果,在读取阅读器时,直接写入输出流?更快,更少消耗内存。

作为对第二个问题的回答 - 为什么ASP工作正常,我怀疑你在内存中存储了相同的内容3次以便输出它(在DataTable中,在StringWriter和输出缓冲区中) )。我的ASP有点生疏,但我猜你正在使用某种类型的数据库阅读器。

此外,更好地使用一些日志记录基础结构(NLog,log4net),因此您可以输出一些关于哪个操作延迟多少的时间,作为附加远程调试器的替代方法。