Browse Source

Dispose设置,防止内存泄漏

main
coffee 5 months ago
parent
commit
4352f09f28
  1. 29
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/ClassCodeData.cs
  2. 9
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs
  3. 7
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs
  4. 6
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs
  5. 7
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs
  6. 7
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs
  7. 3
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  8. 4
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs
  9. 13
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs

29
Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/ClassCodeData.cs

@ -1,25 +1,34 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
{ {
internal class ClassCodeData internal class ClassCodeData : IDisposable
{ {
public TableType tableType; public TableType tableType;
public string className; public readonly string className;
public Dictionary<int, FieldData> fields = new(); public Dictionary<int, FieldData> fields;
// public FieldData[] fields;
// public int[] keyIndex;
public FieldData[] keyField; public FieldData[] keyField;
public ClassCodeData(string className) public ClassCodeData(string className)
{ {
this.className = $"{char.ToUpper(className[0])}{className.Substring(1)}"; this.className = $"{char.ToUpper(className[0])}{className.Substring(1)}";
}
// keyField = new FieldData[keyIndex.Length]; public void Dispose()
// for (int i = 0; i < keyIndex.Length; i++) {
// { foreach (var field in fields.Values)
// keyField[i] = fields.First(f => f.colIndex == keyIndex[i]); {
// } field.Dispose();
}
fields.Clear();
fields = null;
foreach (var fieldData in keyField)
{
fieldData?.Dispose();
}
keyField = null;
} }
} }
} }

9
Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs

@ -3,7 +3,7 @@ using System.CodeDom;
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
{ {
internal class FieldData internal class FieldData : IDisposable
{ {
public int colIndex; public int colIndex;
public bool isKey; public bool isKey;
@ -35,13 +35,10 @@ namespace Tools.ExcelResolver.Editor
return codeField; return codeField;
} }
internal void Dispose() public void Dispose()
{ {
varName = null; type?.Dispose();
type = null; type = null;
info = null;
description = null;
path = null;
} }
} }
} }

7
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs

@ -76,5 +76,12 @@ namespace Tools.ExcelResolver.Editor
return dict; return dict;
} }
public override void Dispose()
{
base.Dispose();
KeyType?.Dispose();
ValueType?.Dispose();
}
} }
} }

6
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs

@ -57,5 +57,11 @@ namespace Tools.ExcelResolver.Editor
} }
return null; return null;
} }
public override void Dispose()
{
base.Dispose();
InnerType?.Dispose();
}
} }
} }

7
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs

@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
{ {
internal abstract class TType internal abstract class TType : IDisposable
{ {
internal abstract Type RealType { get; } internal abstract Type RealType { get; }
@ -69,5 +69,10 @@ namespace Tools.ExcelResolver.Editor
} }
return tag.GetValueOrDefault(key, defaultValue); return tag.GetValueOrDefault(key, defaultValue);
} }
public virtual void Dispose()
{
tag?.Clear();
}
} }
} }

7
Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs

@ -79,6 +79,13 @@ namespace Tools.ExcelResolver.Editor
internal static void Dispose() internal static void Dispose()
{ {
TypeCache.Clear(); TypeCache.Clear();
foreach (var allTType in _allTTypes ?? Array.Empty<TType>())
{
allTType.Dispose();
}
_allTTypes = null;
_enumTypes = null;
_currentCell = null;
} }
/* /*

3
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("~$")); var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx").Where(f => !f.Name.StartsWith("~$"));
foreach (var excelFile in excelFiles) foreach (var excelFile in excelFiles)
{ {
using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
FileShare.ReadWrite);
using ExcelPackage package = new ExcelPackage(stream); using ExcelPackage package = new ExcelPackage(stream);
ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"];
if (null == worksheet) if (null == worksheet)

4
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs

@ -11,7 +11,7 @@ namespace Tools.ExcelResolver.Editor
public sealed partial class ExcelResolverEditorWindow public sealed partial class ExcelResolverEditorWindow
{ {
[FoldoutGroup("Hide Setting")] [FoldoutGroup("Hide Setting")]
[ShowInInspector] private Dictionary<ExcelWorksheet, ClassCodeData> classCodeDataDict; [ShowInInspector] private Dictionary<ExcelWorksheet, ClassCodeData> classCodeDataDict = new();
private void WriteSOData() private void WriteSOData()
{ {
@ -69,6 +69,8 @@ namespace Tools.ExcelResolver.Editor
} }
AssetDatabase.SaveAssets(); AssetDatabase.SaveAssets();
} }
GC.Collect();
GC.WaitForPendingFinalizers();
} }
} }
} }

13
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs

@ -65,6 +65,7 @@ namespace Tools.ExcelResolver.Editor
[Button("导表", ButtonSizes.Gigantic)] [Button("导表", ButtonSizes.Gigantic)]
private void StartExportExcel() private void StartExportExcel()
{ {
Debug.Log("Before GC: " + System.GC.GetTotalMemory(false) + " bytes");
if (isClearConsole) if (isClearConsole)
{ {
UnityEditorUtil.ClearConsole(); UnityEditorUtil.ClearConsole();
@ -74,5 +75,17 @@ namespace Tools.ExcelResolver.Editor
// [ButtonGroup("Generate")] // [ButtonGroup("Generate")]
// private void GenerateSO() => WriteSOData(); // private void GenerateSO() => WriteSOData();
protected override void OnDestroy()
{
base.OnDestroy();
foreach (var pair in classCodeDataDict)
{
pair.Value.Dispose();
}
classCodeDataDict.Clear();
ExcelResolverUtil.Dispose();
}
} }
} }
Loading…
Cancel
Save