为防止客户端订阅了服务器端的事件而没有释放,服务器端的事件调用已经加了try catch(在catch中加入了释放语句),但是这样做遇到一个问题,当一个客户端没有正常释放事件,另一个客户端运行到try catch语句时,会有不定时的停顿,快则几秒,慢则几分钟。
这样说不知大家明否。不明的话我再上程序。
谢谢!!

解决方案 »

  1.   

    问题的代码:
                if (this.O_ArriveNumEvent != null)
                {
                    foreach (Delegate d in O_ArriveNumEvent.GetInvocationList())
                    {
                        try
                        {
                            ((IQueueLib.O_ArriveNumEventHandler)d)(this, sChnNum, args); //向客户端激活事件
                        }
                        catch
                        {
                            O_ArriveNumEvent -= (IQueueLib.O_ArriveNumEventHandler)d;  //解决当客户端非法退出时未释事件委托
                        }
                    }
                }
    以上代码存在于服务器中,现在有两个程序A,B,同样订阅了_ArriveNumEvent 这个事件,如果两个程序都正常退出,上面的代码执行是没问题的,但如果程序A不正常退(如掉电),那么程序B再执行以上代码时会出现一次几秒至几分钟的停顿,时间不定,但一定能执行成功。估计是try语句出现停顿后再执行catch语句,释放程序A的订阅,以后程序B就正常了。这样说,大家表白我的意思吗?
      

  2.   

    http://topic.csdn.net/u/20070405/11/6ebdb4b1-06c7-4110-86bf-17fcfcdbb68c.html
      

  3.   

    这个卡是因为在委托列表里找委托,然后一个一个判断过去,这段时间很长,你客户端越来越多,这个时间会越来越长,但可以通过改remoting的结构来避免这个问题.
    加QQ6268631