Remoting服务端内存一直涨??

北京的雾霾天 2012-10-25 09:37:13
服务端:
使用Remoting编写了服务端,使用RegisterWellKnownServiceType注册远程类型,使用Singleton模式。
客户端:
使用Activator.GetObject创建服务代理,使用的是自定义接口(Interface),方法使用自定义的返回类型,有序列化。

经测试,多个客户端连接服务端的时候,服务端只对对象调用了构造函数一次,对于Singleton这是正常的。
调用对象的方法的时候正常的返回了自定义的类型,自定义类型能够被GC自动释放(为了测试添加析构函数,析构能被调用)
服务端有对文件进行操作(FileStream)且使用了using:
using (System.IO.FileStream fs = new System.IO.FileStream(...
{
....
}

但是随着客户端不断的调用,服务端的内存在不停的上涨,几K以上的上涨,可以从十几M上涨到1G以上,好像没有稳下来的意思。感觉能释放的都释放了,GC也能正常调用析构,到底是哪里出问题了?
该怎么办?
...全文
159 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
已确信,内存并没有一直在增涨,是有回落的,只是观察的还没有够多而已。一场虚惊!
回复
qldsrx 2012-10-25
帮你查了下那个Singleton模式,估计你的问题就是Singleton模式带来的,试试改为SingleCall看看,虽然你处处释放内存,但是你不能保证Remoting本身有对对象的引用,一旦引用存在,GC就不可能释放干净,而SingleCall则不存在该问题,每个请求都是单独的对象实例,过去的请求所创建的实例肯定会释放。另外网上有人批判了Singleton模式,说是速度非常慢,因为那个模式是单线程的,如果多个人同时请求,那么就有可能导致某人的请求要几分钟后才能得到回复。
回复
hglai 2012-10-25
没有用过,
回复
CSDN上,没有人遇到到过这个问题吗?
回复
XBodhi. 2012-10-25
Remoting 没有用过。
回复
代码小天王 2012-10-25
远程对象的生命周期和.net普通对象的生命周期是不一样的
回复
qldsrx 2012-10-25
没用过Remoting,直接上WCF的,对于WCF,有个传输模式的设置,Stream或Buffer,不知道这个在Remoting里面有没有,需要对文件进行操作的,一般都要设置为Stream,否则服务端的内存怎么都不够用。
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.