WCF 大数据量序列化占用内存高的问题

jinhuawu 2011-07-20 11:05:01
当我读取的数据量比较大的时候,占用的内存非常高。560多条数据。40个字段,20个字段有值,都是字符串的,平均20个字节左右。这时会占用120-150M内存,如果10个客户端每秒取560条数据,服务器内存都用到1G了。有什么方法能解决这个问题?
还有就是 我一次取 24W条数据,每条数据10个字段,每个字段10个字节,占用的内存为220M内存左右。
怎么能把内存降下来?
...全文
313 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2011-07-22
  • 打赏
  • 举报
回复
另外,只要没有出现OutOfMemory也没关系,GC没有立即回收也是正常的。
绿色夹克衫 2011-07-22
  • 打赏
  • 举报
回复
按理说转为文件流应该是可以的(不过可能会造成IO堵塞),占用相当于缓存大小的内存就可以,在内存里,也可以考虑用gzip之类的做压缩。另外lz用工具查查内存使用情况,感觉可能是没有及时释放内存造成的。

[Quote=引用 3 楼 jinhuawu 的回复:]
用流无法降低内存的使用率。只能提供传输的效率吧。。现在是用循环获取数据,单个用户访问能控制在20M以内。这样内存问题就解决了,因为我这里的生产环境是局域网,所以传输的问题并不明显。
这里占用内存注意是序列化的时候用的比较多,而我直接用的WCF的序列化,所以无法及时释放资源。不知道有无解决办法。不怎么想自己写序列化啊。。。
[/Quote]
mail_ricklee 2011-07-22
  • 打赏
  • 举报
回复
1 ProtoBuf
2 MessagePack

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

参考FortuneBase
参考地址www.cnblogs.com/mail-ricklee
机器人 2011-07-21
  • 打赏
  • 举报
回复
Streamed的话,lz的做法需要先变成MemoryStream,其实也还是一样的,个人以为Streamed可能更适合大IO操作。
控制下并发访问量,客户端稍微延迟点是否能够接受?
如果客户端性能不能降低,应该考虑用服务负载,用服务器集群。搭建多个WCF服务器来分摊查询压力。
比如:NLB集群
jinhuawu 2011-07-21
  • 打赏
  • 举报
回复
用流无法降低内存的使用率。只能提供传输的效率吧。。现在是用循环获取数据,单个用户访问能控制在20M以内。这样内存问题就解决了,因为我这里的生产环境是局域网,所以传输的问题并不明显。
这里占用内存注意是序列化的时候用的比较多,而我直接用的WCF的序列化,所以无法及时释放资源。不知道有无解决办法。不怎么想自己写序列化啊。。。
绿色夹克衫 2011-07-20
  • 打赏
  • 举报
回复
用流试试

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧