String .NET 4.5大型字符串流和处置?

String .NET 4.5大型字符串流和处置?,string,performance,wcf,out-of-memory,String,Performance,Wcf,Out Of Memory,我在磁盘上有文本文件,它们作为字符串(实际上是内容)发送给WCF调用者。当前WCF方法代码将整个文件作为字符串读入内存,然后返回字符串。无法更改方法签名/接口 系统的受欢迎程度已经提高,我怀疑这是不可持续的,因为一些字符串结果的大小是400k 有谁能推荐一种在.NET4.5中策略性地处理字符串的方法(注意,我使用小写字母“d”,我不一定询问IDisposable),或者通过另一种方法通过WCF以尽可能少的内存使用量将文件作为字符串提供 谢谢。一种方法是对您的回复设置压缩。我发现这篇文章使用GZi

我在磁盘上有文本文件,它们作为字符串(实际上是内容)发送给WCF调用者。当前WCF方法代码将整个文件作为字符串读入内存,然后返回字符串。无法更改方法签名/接口

系统的受欢迎程度已经提高,我怀疑这是不可持续的,因为一些字符串结果的大小是400k

有谁能推荐一种在.NET4.5中策略性地处理字符串的方法(注意,我使用小写字母“d”,我不一定询问IDisposable),或者通过另一种方法通过WCF以尽可能少的内存使用量将文件作为字符串提供


谢谢。

一种方法是对您的回复设置压缩。我发现这篇文章使用GZip压缩算法对来自WCF服务的响应进行压缩:

注意:在客户端,理论上,他们应该在消息头中看到内容已经用GZip压缩,并自动解压缩正文。希望这有帮助。

除了压缩:

据我所知,响应对象中有字符串类型属性,这是主要问题。一个创可贴解决方案是显式调用GC,但根据MSDN

可以通过调用Collect强制垃圾收集,但是 大多数情况下,这应该避免,因为它可能会造成 性能问题。”


因此,您最好更改合同(如果可能的话),并使用流媒体传输文件。

更改合同是绝对不可能的。来自大型企业的多个付费Java客户端每天都会接触此服务。更改接口不是一个选项。谢谢。谢谢,但实际的问题是,我正在处理字符串,需要在内部清理它们。问题不在于客户机接受了什么,客户机认为它们很好。即使这些字符串已被提供给客户机,您是否仍将它们保留在内存中?如果这是您的要求,我不会将它们显式设置为null。这不会有任何帮助,它只会将对字符串的引用设置为“nothing”,但不会影响等待插入的字符串。我想知道您是否正在将字符串缓存到某个位置以便快速访问,而不必访问某种数据库。