内存中非常大的字符串

bus*_*man 10 c# memory string memory-leaks memory-management

我正在编写一个程序,用于格式化100个MB字符串数据(接近一个演出)到xml ==我需要将它作为对HTTP(GET)请求的响应返回.

我正在使用StringWriter/XmlWriter在循环中构建记录的XML并返回

using (StringWriter writer = new StringWriter())
using (writer = XmlWriter.Create(writer, settings)) //where settings are the xml props

writer.ToString() 
Run Code Online (Sandbox Code Playgroud)

在测试期间,我看到了一些内存异常 - 并且对如何找到解决方案毫无头绪?你们对内存优化的响应传递有什么建议吗?

有一种内存有效的数据编码方式吗?或者可能分块数据 - 我只是想不出如何在不将整个事物构建成一个巨大的字符串对象的情况下返回它

谢谢

- 一些澄清 - 这是一个通过千兆以太网链接的asp .net webservices应用程序,正如乔希指出的那样.我对它不太熟悉,所以仍然有点学习曲线.

我正在使用XMLWriter创建XML并使用String创建一个字符串

一些统计数据 - 响应xml大小=约385兆(我的数据大小会快速增长到超过这个数量)

由内存分析器计算的字符串对象大小=峰值为605MB

并感谢所有回复的人......

Sam*_*eff 6

使用XmlTextWriterwrap Reponse.OutputStream来将XML发送到客户端并定期刷新响应.这样,您在任何时候都不必拥有超过几mb的内存(至少发送给客户端).


Jos*_*osh 5

您不能只将响应发送给客户吗?XmlWriter不需要将其基础流缓存在内存中。如果是ASP.NET,则可以使用Response.OutputStream;如果是WCF,则可以使用响应流