我必须将非常大的文件导出为“excel 导出”。由于 .NET 无法导出 excel 文件,所以我使用了简单的 html 表。
它工作正常,但速度很慢。
是否可以在创建每一行时对每一行进行 context.response.write,而不是构建一些超大的字符串并在完成后尝试导出整个内容?
我不太关心使用什么函数来执行此操作,但我希望你知道我的意思。我不想将一个字符串构建到内存中,然后尝试一次全部发送。我宁愿在建表时导出。
这可能吗?
提前致谢!
我必须将非常大的文件导出为“excel 导出”。由于 .NET 无法导出 excel 文件,所以我使用了简单的 html 表。
它工作正常,但速度很慢。
是否可以在创建每一行时对每一行进行 context.response.write,而不是构建一些超大的字符串并在完成后尝试导出整个内容?
我不太关心使用什么函数来执行此操作,但我希望你知道我的意思。我不想将一个字符串构建到内存中,然后尝试一次全部发送。我宁愿在建表时导出。
这可能吗?
提前致谢!
是的,在每一行上使用 context.Response.Write 就可以了。如果不想构建大字符串的原因是服务器内存使用,那么您需要像这样关闭响应缓冲:
context.Response.BufferOutput = false;
否则,无论如何,.NET 只会将您的写入缓冲到内存中,直到最后。
如果原因是执行时间,那么您可能会遇到来自多个字符串连接的性能影响。在这种情况下,您可以改用 StringBuilder 类来构造表。
例如...
StringBuilder sb = new StringBuilder();
for each (<row in database>) {
sb.AppendLine(<current table row>);
}
context.Response.Write(sb.ToString());
有关响应缓冲的更多信息:http: //msdn.microsoft.com/en-us/library/system.web.httpresponse.bufferoutput.aspx
有关 StringBuilder 类的更多信息:http: //msdn.microsoft.com/en-us/library/system.text.stringbuilder (v=vs.110).aspx