void DestroyResItem(ResItemInfo item, bool completeClear = false) { if (item.RefCount > 0) { return; } if (!resCacheDic.Remove(item.CRC)) { return; } if (!objCacheDic.Remove(item.InsID)) { return; } if (!completeClear) { noRefResCache.Cache(item.CRC, item); return; } noRefResCache.Remove(item.CRC); item.obj = null; loader.ReleaseAsset(item.AssetPath, item.CRC); #if UNITY_EDITOR Resources.UnloadUnusedAssets(); #endif }
void OnGUI() { if (GUI.Button(new Rect(10, 10, 80, 50), "Change1")) { PrintArr(mTestDragList); for (int i = 0; i < 10; ++i) { mTmpList.Add(mTestDragList[i]); if (mTmpList[i] is ResItemInfo) { (mTmpList[i] as ResItemInfo).iCount = i + 11000; } else { (mTmpList[i] as EqptItemInfo).Exp = i + 22000; } } Debug.LogWarning("========================="); PrintArr(mTmpList); Debug.LogWarning("========================="); PrintArr(mTestDragList); } if (GUI.Button(new Rect(100, 10, 80, 50), "Change2")) { PrintArr(mTestDragList); for (int i = 0; i < 10; ++i) { if (mTestDragList[i] is ResItemInfo) { ResItemInfo resItem = new ResItemInfo(); resItem = mTestDragList[i] as ResItemInfo; mTmpList.Add(resItem); } else { EqptItemInfo eqptItem = new EqptItemInfo(); eqptItem = mTestDragList[i] as EqptItemInfo; mTmpList.Add(eqptItem); } if (mTmpList[i] is ResItemInfo) { (mTmpList[i] as ResItemInfo).iCount = i + 11000; } else { (mTmpList[i] as EqptItemInfo).Exp = i + 22000; } } Debug.LogWarning("========================="); PrintArr(mTmpList); Debug.LogWarning("========================="); PrintArr(mTestDragList); } }
void CacheNoRefRes(string path, uint crc, Object obj) { var item = new ResItemInfo(); item.AssetPath = path; item.CRC = crc; item.obj = obj; item.RefCount = 0; item.InsID = obj.GetInstanceID(); noRefResCache.Cache(item.CRC, item); }
void CacheRes(string path, uint crc, Object obj, int addRefCount) { WashOut(); var item = new ResItemInfo(); item.AssetPath = path; item.CRC = crc; item.obj = obj; item.RefCount = addRefCount; item.InsID = obj.GetInstanceID(); resCacheDic.Add(crc, item); objCacheDic.Add(item.InsID, item); }
public bool ReleaseRes(uint crc, bool completeClear) { ResItemInfo item = null; if (!resCacheDic.TryGetValue(crc, out item)) { Debug.LogWarningFormat("released not exist res {0}", crc.ToString()); return(false); } item.RefCount--; DestroyResItem(item, completeClear); return(true); }
public bool ReleaseRes(Object obj, bool completeClear) { var insID = obj.GetInstanceID(); ResItemInfo item = null; if (!objCacheDic.TryGetValue(insID, out item)) { Debug.LogWarningFormat("released not exist res {0}", obj.name); return(false); } item.RefCount--; DestroyResItem(item, completeClear); return(true); }
// Use this for initialization void Start() { for (int i = 0; i < 10; ++i) { ResItemInfo resItem = new ResItemInfo(); resItem.iCount = i + 10000; resItem.mStrName = "Res_" + i.ToString(); mTestDragList.Add(resItem); EqptItemInfo eqptItem = new EqptItemInfo(); eqptItem.Exp = i + 20000; eqptItem.mStrName = "Eqpt_" + i.ToString(); mTestDragList.Add(eqptItem); } }
void OnGUI() { if (GUI.Button(new Rect(0, 50, 100, 50), "Add")) { ArrayList ArrList = new ArrayList(); int idx = 0; for (int i = 0; i < 10; ++i) { ResItemInfo resItem = new ResItemInfo(); resItem.iCount = i + 10000; resItem.mIndex = ++idx; resItem.mStrName = "Res_" + idx.ToString(); ArrList.Add(resItem); EqptItemInfo eqptItem = new EqptItemInfo(); eqptItem.Exp = i + 20000; eqptItem.mIndex = ++idx; eqptItem.mStrName = "Eqpt_" + idx.ToString(); ArrList.Add(eqptItem); } Debug.LogWarning("========Len = " + ArrList.Count); BindDataSource(ArrList, 1); } if (GUI.Button(new Rect(0, 100, 100, 50), "Del")) { } if (GUI.Button(new Rect(0, 150, 100, 50), "Del&Add")) { } return; if (GUI.Button(new Rect(0, 50, 100, 50), "Add")) { AddItems(); } if (GUI.Button(new Rect(0, 100, 100, 50), "Del")) { DelItems(); } if (GUI.Button(new Rect(0, 150, 100, 50), "Del&Add")) { DelItems(); AddItems(); } }
ResItemInfo GetCacheResItem(uint crc, int addRefCount = 1) { ResItemInfo item = null; if (resCacheDic.TryGetValue(crc, out item)) { item.RefCount += addRefCount; } else { //LRU缓存中查找 item = noRefResCache.Get(crc); if (item != null) { item.RefCount += addRefCount; resCacheDic.Add(crc, item); objCacheDic.Add(item.InsID, item); } } return(item); }