From 4352f09f28ee440f0e922a7055a0f818c5024f25 Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Sun, 26 Jan 2025 02:06:28 +0800 Subject: [PATCH] =?UTF-8?q?Dispose=E8=AE=BE=E7=BD=AE=EF=BC=8C=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Core/Data/ClassCodeData.cs | 31 ++++++++++++------- .../Editor/Core/Data/FieldData.cs | 9 ++---- .../ExcelResolver/Editor/Core/Types/TDict.cs | 7 +++++ .../ExcelResolver/Editor/Core/Types/TList.cs | 6 ++++ .../ExcelResolver/Editor/Core/Types/TType.cs | 7 ++++- .../Core/Util/ExcelResolverUtil.Type.cs | 7 +++++ .../ExcelResolverEditorWindow.ReadExcel.cs | 3 +- .../ExcelResolverEditorWindow.WriteSOData.cs | 4 ++- .../Editor/ExcelResolverEditorWindow.cs | 13 ++++++++ 9 files changed, 66 insertions(+), 21 deletions(-) diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/ClassCodeData.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/ClassCodeData.cs index ba7f8fa..291f323 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/ClassCodeData.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/ClassCodeData.cs @@ -1,25 +1,34 @@ +using System; using System.Collections.Generic; namespace Tools.ExcelResolver.Editor { - internal class ClassCodeData + internal class ClassCodeData : IDisposable { public TableType tableType; - public string className; - public Dictionary fields = new(); - // public FieldData[] fields; - // public int[] keyIndex; + public readonly string className; + public Dictionary fields; public FieldData[] keyField; public ClassCodeData(string className) { this.className = $"{char.ToUpper(className[0])}{className.Substring(1)}"; - - // keyField = new FieldData[keyIndex.Length]; - // for (int i = 0; i < keyIndex.Length; i++) - // { - // keyField[i] = fields.First(f => f.colIndex == keyIndex[i]); - // } + } + + public void Dispose() + { + foreach (var field in fields.Values) + { + field.Dispose(); + } + fields.Clear(); + fields = null; + + foreach (var fieldData in keyField) + { + fieldData?.Dispose(); + } + keyField = null; } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs index 28dce6e..db2366a 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs @@ -3,7 +3,7 @@ using System.CodeDom; namespace Tools.ExcelResolver.Editor { - internal class FieldData + internal class FieldData : IDisposable { public int colIndex; public bool isKey; @@ -35,13 +35,10 @@ namespace Tools.ExcelResolver.Editor return codeField; } - internal void Dispose() + public void Dispose() { - varName = null; + type?.Dispose(); type = null; - info = null; - description = null; - path = null; } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs index 1d07ab6..bb5c820 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs @@ -76,5 +76,12 @@ namespace Tools.ExcelResolver.Editor return dict; } + + public override void Dispose() + { + base.Dispose(); + KeyType?.Dispose(); + ValueType?.Dispose(); + } } } diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs index 175decf..4689acc 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs @@ -57,5 +57,11 @@ namespace Tools.ExcelResolver.Editor } return null; } + + public override void Dispose() + { + base.Dispose(); + InnerType?.Dispose(); + } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs index 98f3880..762124e 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace Tools.ExcelResolver.Editor { - internal abstract class TType + internal abstract class TType : IDisposable { internal abstract Type RealType { get; } @@ -69,5 +69,10 @@ namespace Tools.ExcelResolver.Editor } return tag.GetValueOrDefault(key, defaultValue); } + + public virtual void Dispose() + { + tag?.Clear(); + } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs index 4707ac6..0293e24 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs @@ -79,6 +79,13 @@ namespace Tools.ExcelResolver.Editor internal static void Dispose() { TypeCache.Clear(); + foreach (var allTType in _allTTypes ?? Array.Empty()) + { + allTType.Dispose(); + } + _allTTypes = null; + _enumTypes = null; + _currentCell = null; } /* diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index 7893f82..6194950 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -21,8 +21,7 @@ namespace Tools.ExcelResolver.Editor var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx").Where(f => !f.Name.StartsWith("~$")); foreach (var excelFile in excelFiles) { - using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); + using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); using ExcelPackage package = new ExcelPackage(stream); ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; if (null == worksheet) diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs index 2b2547a..563fd77 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs @@ -11,7 +11,7 @@ namespace Tools.ExcelResolver.Editor public sealed partial class ExcelResolverEditorWindow { [FoldoutGroup("Hide Setting")] - [ShowInInspector] private Dictionary classCodeDataDict; + [ShowInInspector] private Dictionary classCodeDataDict = new(); private void WriteSOData() { @@ -69,6 +69,8 @@ namespace Tools.ExcelResolver.Editor } AssetDatabase.SaveAssets(); } + GC.Collect(); + GC.WaitForPendingFinalizers(); } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs index aaee4e7..f19494e 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs @@ -65,6 +65,7 @@ namespace Tools.ExcelResolver.Editor [Button("导表", ButtonSizes.Gigantic)] private void StartExportExcel() { + Debug.Log("Before GC: " + System.GC.GetTotalMemory(false) + " bytes"); if (isClearConsole) { UnityEditorUtil.ClearConsole(); @@ -74,5 +75,17 @@ namespace Tools.ExcelResolver.Editor // [ButtonGroup("Generate")] // private void GenerateSO() => WriteSOData(); + + + protected override void OnDestroy() + { + base.OnDestroy(); + foreach (var pair in classCodeDataDict) + { + pair.Value.Dispose(); + } + classCodeDataDict.Clear(); + ExcelResolverUtil.Dispose(); + } } } \ No newline at end of file