最近做了一个项目,使用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;
        }