Browse Source

Dispose设置,防止内存泄漏

main
coffee 5 months ago
parent
commit
4352f09f28
  1. 31
      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

31
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<int, FieldData> fields = new();
// public FieldData[] fields;
// public int[] keyIndex;
public readonly string className;
public Dictionary<int, FieldData> 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;
}
}
}

9
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;
}
}
}

7
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();
}
}
}

6
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();
}
}
}

7
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();
}
}
}

7
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<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("~$"));
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)

4
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<ExcelWorksheet, ClassCodeData> classCodeDataDict;
[ShowInInspector] private Dictionary<ExcelWorksheet, ClassCodeData> classCodeDataDict = new();
private void WriteSOData()
{
@ -69,6 +69,8 @@ namespace Tools.ExcelResolver.Editor
}
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)]
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();
}
}
}
Loading…
Cancel
Save