悠游优化点

 

1,foreach  循环用迭代器替代

    使用迭代器进行循环

        //释放对象池
        public void Clear()
        {
            lock (mClassObjectPoolDic)
            {
                var enumerator = mClassObjectPoolDic.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    int key = enumerator.Current.Key;
                }
            }
        }

foreach  优化 

        public void Dispose()
        {
            //foreach(var fsm in m_FsmDic)
            //{
            //    fsm.Value.ShutDown();
            //}
            var enumerator = m_FsmDic.GetEnumerator();
            while (enumerator.MoveNext())
            {
                enumerator.Current.Value.ShutDown();
            }
            m_FsmDic.Clear();
        }

2,网络优化

优化的 

 

 3.优化Socket发包进行小包合并发送

 

#region CheckSendQueue 检查发送队列
        /// <summary>
        /// 检查发送队列,小包合并成打包发送
        /// </summary>
        private void CheckSendQueue()
        {
            if (m_SendCount >= GameEntry.Socket.MaxSendCount)
            {
                //等待下一帧发送
                m_SendCount = 0;
                return;
            }

            lock (m_SendQueue)
            {
                if (m_SendQueue.Count > 0 || m_IsHasUnDealBytes)
                {
                    MMO_MemoryStream ms = m_SocketSendMS;
                    ms.SetLength(0);

                    //上次超过长度未处理的包 
                    if (m_IsHasUnDealBytes)
                    {
                        m_IsHasUnDealBytes = false;
                        ms.Write(m_UnDealBytes, 0, m_UnDealBytes.Length);
                    }

                    while (true)
                    {
                        if (m_SendQueue.Count == 0) break;

                        //从队列中取出一个字节数组
                        byte[] buffer = m_SendQueue.Dequeue();
                        if (buffer.Length + ms.Length <= GameEntry.Socket.MaxSendByteCount)
                        {
                            ms.Write(buffer, 0, buffer.Length);
                        }
                        else
                        {
                            //已经从队列中取出找个字节了,先缓存起来,记下未处理
                            m_UnDealBytes = buffer;
                            m_IsHasUnDealBytes = true;
                            break;
                        }
                    }

                    m_SendCount++;
                    Send(ms.ToArray());
                }
            }
        }
        #endregion

 

#region MakeData 封装数据包
        /// <summary>
        /// 封装数据包
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private byte[] MakeData(byte[] data)
        {
            byte[] retBuffer = null;

            //1.如果数据包的长度 大于了m_CompressLen 则进行压缩
            bool isCompress = data.Length > m_CompressLen ? true : false;
            if (isCompress)
            {
                data = ZlibHelper.CompressBytes(data);
            }

            //2.异或
            data = SecurityUtil.Xor(data);

            //3.Crc校验 压缩后的
            ushort crc = Crc16.CalculateCrc16(data);

            MMO_MemoryStream ms = m_SocketSendMS;
            ms.SetLength(0);

            ms.WriteUShort((ushort)(data.Length + 3));
            ms.WriteBool(isCompress);
            ms.WriteUShort(crc);
            ms.Write(data, 0, data.Length);

            retBuffer = ms.ToArray();
            return retBuffer;
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值