private ResLoader GetResLoader(ResName resName, bool allocate = true)
        {
            ResLoader loader;

            if (!mResLoaderDict.TryGetValue(resName.FullName, out loader))
            {
                if (allocate)
                {
                    loader = ResLoader.Allocate();
                    mResLoaderDict.Add(resName.FullName, loader);
                }
            }
            return(loader);
        }
        /// <summary>
        /// release resource, also release all its dependencies
        /// </summary>
        /// <param name="name">res name with extension, e.g. "a.prefab"</param>
        /// <param name="abName">optional assetbundle name, in case of same naming.</param>
        public static void Release(string name, string abName = null)
        {
            ResName   resName = ResDataMgr.Instance.GetResName(name, abName);
            ResLoader loader  = Instance.GetResLoader(resName, false);

            if (loader != null)
            {
                loader.Recycle2Cache();
                Instance.RemoveResLoader(resName);
                return;
            }

            Debug.LogFormat("<color=yellow> >>>[ResKit]- GlobalResLoader.Release: Can't find res {0} loaded.</color>", resName.FullName);
        }