#pragma warning disable RefCounter002
        public override int Diff(IGameEntity leftEntity, IGameEntity rightEntity, bool skipMissHandle)
#pragma warning restore RefCounter002
        {
            //YF TODO:

            bool needSkip = false;

            if (leftEntity.HasFlagImmutabilityComponent && rightEntity.HasFlagImmutabilityComponent)
            {
                var local  = leftEntity.FlagImmutabilityComponent;
                var remote = rightEntity.FlagImmutabilityComponent;
                if (local.LastModifyServerTime != remote.LastModifyServerTime)
                {
                    local.Reset();
                }
                else if (local.JudgeNeedSkipSyncLatest(serverTime))
                {
                    needSkip = true;
                }
            }

            if (needSkip)
            {
                return(0);
            }

            diffCacheData.LeftEntity  = leftEntity;
            diffCacheData.RightEntity = rightEntity;
            handler.DoDiffEntityStart(leftEntity, rightEntity);
            int count = EntityCompareHelper.CompareEnumeratableGameComponents(leftEntity.SyncLatestComponentDict,
                                                                              rightEntity.SyncLatestComponentDict, handler, diffCacheData);

            handler.DoDiffEntityFinish(leftEntity, rightEntity);
            return(count);
        }
#pragma warning disable RefCounter002
        public override int Diff(IGameEntity leftEntity, IGameEntity rightEntity, bool skipMissHandle)
#pragma warning restore RefCounter002
        {
            diffCacheData.LeftEntity  = leftEntity;
            diffCacheData.RightEntity = rightEntity;
            handler.DoDiffEntityStart(leftEntity, rightEntity);

            int count = EntityCompareHelper.CompareEnumeratableGameComponents(
                leftEntity.SortedComponentList,
                rightEntity.SortedComponentList,
                handler, diffCacheData);

            handler.DoDiffEntityFinish(leftEntity, rightEntity);
            return(count);
        }