private AssetAssociate GetAssociate(string path) { AssetAssociate associate = null; if (m_assetAssociate.TryGetValue(path, out associate)) { return(associate); } return(null); }
public void UnloadAssets(bool unloadAll) { Dictionary <string, int> safeCount = new Dictionary <string, int>(); while (m_recycleAsset.Count > 0) { AssetData asset = m_recycleAsset[0]; m_recycleAsset.RemoveAt(0); if (asset == null) { continue; } AssetAssociate aa = GetAssociate(asset.AssetUrl); if (aa != null && aa.HasAssociateInMemory) { int nCount = 0; safeCount.TryGetValue(asset.AssetUrl, out nCount); if (nCount < 5) { //确保资源删除时,被访问不要超过5次,5次遍历列表失败,此资源强制删除 m_recycleAsset.Add(asset); if (safeCount.ContainsKey(asset.AssetUrl)) { safeCount[asset.AssetUrl]++; } else { safeCount.Add(asset.AssetUrl, 1); } continue; } } if (asset != null && !asset.IsUnLoaded) { ChangeAssetState(asset, false); asset.UnLoad(true); m_assetInMemory.Remove(asset.AssetUrl); m_recycleLookUp.Remove(asset.AssetUrl); } } }
public void RecordAssociate(string url, string[] depends) { AssetAssociate aa = null; url = AssetUtility.GetAssetRealPath(url); if (depends != null) { for (int i = 0; i < depends.Length; ++i) { string tdp = AssetUtility.GetAssetRealPath(depends[i]); if (!m_assetAssociate.TryGetValue(tdp, out aa)) { aa = new AssetAssociate(); aa.Url = tdp; m_assetAssociate.Add(tdp, aa); } aa.SetAssociate(url, aa.GetAAState(url)); } } }