WCF 大数据量序列化占用内存高的问题
当我读取的数据量比较大的时候,占用的内存非常高。560多条数据。40个字段,20个字段有值,都是字符串的,平均20个字节左右。这时会占用120-150M内存,如果10个客户端每秒取560条数据,服务器内存都用到1G了。有什么方法能解决这个问题?还有就是 我一次取 24W条数据,每条数据10个字段,每个字段10个字节,占用的内存为220M内存左右。
怎么能把内存降下来?
--------------------编程问答-------------------- 用流试试 --------------------编程问答-------------------- Streamed的话,lz的做法需要先变成MemoryStream,其实也还是一样的,个人以为Streamed可能更适合大IO操作。
控制下并发访问量,客户端稍微延迟点是否能够接受?
如果客户端性能不能降低,应该考虑用服务负载,用服务器集群。搭建多个WCF服务器来分摊查询压力。
比如:NLB集群
--------------------编程问答-------------------- 用流无法降低内存的使用率。只能提供传输的效率吧。。现在是用循环获取数据,单个用户访问能控制在20M以内。这样内存问题就解决了,因为我这里的生产环境是局域网,所以传输的问题并不明显。
这里占用内存注意是序列化的时候用的比较多,而我直接用的WCF的序列化,所以无法及时释放资源。不知道有无解决办法。不怎么想自己写序列化啊。。。 --------------------编程问答-------------------- 按理说转为文件流应该是可以的(不过可能会造成IO堵塞),占用相当于缓存大小的内存就可以,在内存里,也可以考虑用gzip之类的做压缩。另外lz用工具查查内存使用情况,感觉可能是没有及时释放内存造成的。
--------------------编程问答-------------------- 另外,只要没有出现OutOfMemory也没关系,GC没有立即回收也是正常的。 --------------------编程问答-------------------- 1 ProtoBuf
2 MessagePack
替代.Net自带的Xml序列化、反序列化
参考FortuneBase
参考地址www.cnblogs.com/mail-ricklee
补充:.NET技术 , C#