非常奇怪的问题,因为这在我们旧的经典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分钟。
答案 0 :(得分:2)
附加一个远程调试器并找到它挂起的位置?
你需要弄清楚它是字符串编写器循环,还是实际的查询代码(这里没有提供)。
答案 1 :(得分:0)
听起来好像你正在溢出输出缓冲区。也许在那里添加一个计数器来冲洗每几百行。
此外,Response对象基本上为您完成了StringWriter的大部分工作。使用StringWriter作为中介可能是多余的。
答案 2 :(得分:0)
使用StringWriter和DataTable都是过度的。
为什么不直接使用SqlReader从数据库中获取结果,在读取阅读器时,直接写入输出流?更快,更少消耗内存。
作为对第二个问题的回答 - 为什么ASP工作正常,我怀疑你在内存中存储了相同的内容3次以便输出它(在DataTable中,在StringWriter和输出缓冲区中) )。我的ASP有点生疏,但我猜你正在使用某种类型的数据库阅读器。
此外,更好地使用一些日志记录基础结构(NLog,log4net),因此您可以输出一些关于哪个操作延迟多少的时间,作为附加远程调试器的替代方法。