当前位置:编程学习 > C#/ASP.NET >>

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用工具查查内存使用情况,感觉可能是没有及时释放内存造成的。

引用 3 楼 jinhuawu 的回复:
用流无法降低内存的使用率。只能提供传输的效率吧。。现在是用循环获取数据,单个用户访问能控制在20M以内。这样内存问题就解决了,因为我这里的生产环境是局域网,所以传输的问题并不明显。
这里占用内存注意是序列化的时候用的比较多,而我直接用的WCF的序列化,所以无法及时释放资源。不知道有无解决办法。不怎么想自己写序列化啊。。。
--------------------编程问答-------------------- 另外,只要没有出现OutOfMemory也没关系,GC没有立即回收也是正常的。 --------------------编程问答-------------------- 1 ProtoBuf
2 MessagePack

替代.Net自带的Xml序列化、反序列化

参考FortuneBase
参考地址www.cnblogs.com/mail-ricklee
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,