public void Update(float dt) { m_fElapseTime += dt; if (m_fElapseTime < 0.5f) { return; } { Dictionary <string, List <IGameObject> > .Enumerator iter = m_mapRenderObjIdle.GetEnumerator(); while (iter.MoveNext()) // 缓存池里面有数据 { List <IGameObject> lstRemove = iter.Current.Value; for (int i = 0, imax = lstRemove.Count; i < imax; ++i) { var item = lstRemove[i]; if (item.bCacheForever) { continue; } if (Time.realtimeSinceStartup - item.IdleStartTime > 60) { AssetManager.Instance().RemoveGameObjFromPool(item); lstRemove[i].Destroy(); //一个个慢慢删除避免GC过大造成卡顿 lstRemove.RemoveAt(i); break; } } } } { // 特效更新时间 Dictionary <int, IEffect> .Enumerator effectiter = m_mapEffect.GetEnumerator(); while (effectiter.MoveNext()) { IEffect e = effectiter.Current.Value; if (e != null) { e.Update(); } } // 移除播放完成的特效 for (int i = 0, imax = m_lstEffectTodelete.Count; i < imax; i++) { IEffect obj = null; if (m_mapEffect.TryGetValue(m_lstEffectTodelete[i], out obj)) { if (obj != null) { obj.OnComplete(); RemoveEffectObj(obj); } } } m_lstEffectTodelete.Clear(); //删除特效 Dictionary <string, List <IEffect> > .Enumerator effectMaoIter = m_mapEffectObjIdle.GetEnumerator(); while (effectMaoIter.MoveNext()) // 缓存池里面有数据 { List <IEffect> lstRemove = effectMaoIter.Current.Value; for (int i = 0, imax = lstRemove.Count; i < imax; ++i) { var item = lstRemove[i]; if (item.bCacheForever) { continue; } if (Time.realtimeSinceStartup - item.IdleStartTime > 60) { lstRemove[i].Destroy(); lstRemove.RemoveAt(i); break; } } } } m_fElapseTime = 0; }