最近做了一个项目,使用remoting。
发现一个严重的问题,客户端内存暴涨。客户端采集图像数据,然后发送到服务端进行显示。
每执行一次图像采集,内存就增长15-17M。直到2G,然后卡掉。
怎么处理啊?我把客户端所有的数组、对象都按时释放。可问题还是没有解决。
是不是我使用的方式有问题啊?客户端:
public static void registerRemote()
{
string address = System.Configuration.ConfigurationManager.AppSettings["remoteAddress"].ToString(); BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary props = new Hashtable();
props["port"] = 0;
HttpChannel channel = new HttpChannel(props, clientProvider, serverProvider);
ChannelServices.RegisterChannel(channel, false); IRemote = (IRemoteCommunicate)Activator.GetObject(
typeof(IRemoteCommunicate), address); wrapper = new EventWrapper();//客户端注册事件必须进行中间转换
wrapper.sendXRayEventWrapper += new HandlerSendXRay(sendXRay);
IRemote.sendXRayEvent += new HandlerSendXRay(wrapper.sendXRay);
}
服务端:
public static bool registerRemoting()
{
bool res = true;
try
{
string remoteName = CCommonData.appData.P_remoteName;
int remotePort = Convert.ToInt32(CCommonData.appData.P_remotePort); BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary props = new Hashtable();
props["port"] = remotePort;
HttpChannel channel = new HttpChannel(props, clientProvider, serverProvider);
ChannelServices.RegisterChannel(channel, false); remoteObj = new Remote.RemoteObj();
ObjRef objRef = RemotingServices.Marshal(remoteObj, remoteName); remoteObj.transferImgDataEvent += new RemoteCommon.HandlerTransferImgData(Obj_transitImgDataEvent);
}
catch (Exception ee)
{
res = false;
}
return res;
}
发现一个严重的问题,客户端内存暴涨。客户端采集图像数据,然后发送到服务端进行显示。
每执行一次图像采集,内存就增长15-17M。直到2G,然后卡掉。
怎么处理啊?我把客户端所有的数组、对象都按时释放。可问题还是没有解决。
是不是我使用的方式有问题啊?客户端:
public static void registerRemote()
{
string address = System.Configuration.ConfigurationManager.AppSettings["remoteAddress"].ToString(); BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary props = new Hashtable();
props["port"] = 0;
HttpChannel channel = new HttpChannel(props, clientProvider, serverProvider);
ChannelServices.RegisterChannel(channel, false); IRemote = (IRemoteCommunicate)Activator.GetObject(
typeof(IRemoteCommunicate), address); wrapper = new EventWrapper();//客户端注册事件必须进行中间转换
wrapper.sendXRayEventWrapper += new HandlerSendXRay(sendXRay);
IRemote.sendXRayEvent += new HandlerSendXRay(wrapper.sendXRay);
}
服务端:
public static bool registerRemoting()
{
bool res = true;
try
{
string remoteName = CCommonData.appData.P_remoteName;
int remotePort = Convert.ToInt32(CCommonData.appData.P_remotePort); BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary props = new Hashtable();
props["port"] = remotePort;
HttpChannel channel = new HttpChannel(props, clientProvider, serverProvider);
ChannelServices.RegisterChannel(channel, false); remoteObj = new Remote.RemoteObj();
ObjRef objRef = RemotingServices.Marshal(remoteObj, remoteName); remoteObj.transferImgDataEvent += new RemoteCommon.HandlerTransferImgData(Obj_transitImgDataEvent);
}
catch (Exception ee)
{
res = false;
}
return res;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货