using System.Collections.Generic; using UnityEngine; namespace XGame.Framework.Memory { public delegate void CleanMemoryDelegate(); /// /// 内存监控,业务不要用 /// public static class MemoryMonitor { private static HashSet _delegateRegisters = new HashSet(); static MemoryMonitor() { Application.lowMemory += OnLowMemory; } private static void OnLowMemory() { Log.Info("内存警告!!"); CleanMemory(); } public static void CleanMemory() { Log.Info("Clean Memory!!"); foreach (var register in _delegateRegisters) { try { register?.Invoke(); } catch (System.Exception e) { Log.Error($"Memory Warning Delegate Exception: Message: {e.Message}, StackTrace: {e.StackTrace}"); } } //TODO //AssetHelper.UnloadUnusedAssets(); System.GC.Collect(); Log.Info("Clean Memory Done..."); } public static void Register(CleanMemoryDelegate register) { if (register == null) return; if (!_delegateRegisters.Contains(register)) _delegateRegisters.Add(register); } public static void UnRegister(CleanMemoryDelegate unRegister) { if (unRegister == null) return; if (_delegateRegisters.Contains(unRegister)) _delegateRegisters.Remove(unRegister); } internal static void Dispose() { _delegateRegisters.Clear(); } } }