Run GC when destroying multiple objects

This commit is contained in:
Atony committed 2026-06-20 14:53:45 -05:00
1 parent 3a5a397846
commit 750e00d06d
8 files changed
+30 -20

No files matched your search

+2 -1
View File
@@ -276,8 +276,9 @@ public static class TaskAdderPatches
__instance.transform.FindChild("TitleText_TMP")?.gameObject.DestroyImmediate();
}
__instance.ActiveItems.ToArray().Do(x => x.gameObject.DeepDestroy());
__instance.ActiveItems.ToArray().Do(x => x.gameObject.DeepDestroy(false));
__instance.ActiveItems.Clear();
Utilities.Extensions.ClearGarbageCollector();
float num = 0f;
float num2 = 0f;
+2 -1
View File
@@ -143,8 +143,9 @@ public static class HudManagerPatches
foreach (var t in BottomLeft.GetComponentsInChildren<ActionButton>(true))
{
t.gameObject.DeepDestroy();
t.gameObject.DeepDestroy(false);
}
Utilities.Extensions.ClearGarbageCollector();
var gridArrange = BottomLeft.GetComponent<GridArrange>();
var aspectPosition = BottomLeft.GetComponent<AspectPosition>();
+3 -2
View File
@@ -92,9 +92,10 @@ public static class HatsTabPatches
if (loadRoutine != null) Coroutines.Stop(loadRoutine);
hatIndex = 0;
foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy();
foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy(false);
__instance.ColorChips.Clear();
__instance.scroller.Inner.GetComponentsInChildren<TextMeshPro>().Do(x => x.gameObject.DeepDestroy());
__instance.scroller.Inner.GetComponentsInChildren<TextMeshPro>().Do(x => x.gameObject.DeepDestroy(false));
Utilities.Extensions.ClearGarbageCollector();
var groupNameText = __instance.GetComponentInChildren<TextMeshPro>(false);
+3 -2
View File
@@ -81,9 +81,10 @@ public static class NameplatesTabPatches
private static void GenerateHats(NameplatesTab __instance, int page)
{
foreach (ColorChip instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy();
foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy(false);
__instance.ColorChips.Clear();
__instance.scroller.Inner.GetComponentsInChildren<TextMeshPro>().Do(x => x.gameObject.DeepDestroy());
__instance.scroller.Inner.GetComponentsInChildren<TextMeshPro>().Do(x => x.gameObject.DeepDestroy(false));
Utilities.Extensions.ClearGarbageCollector();
var groupNameText = __instance.GetComponentInChildren<TextMeshPro>(false);
+3 -2
View File
@@ -83,9 +83,10 @@ public static class SkinsTabPatches
private static void GenerateHats(SkinsTab __instance, int page)
{
foreach (ColorChip instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy();
foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy(false);
__instance.ColorChips.Clear();
__instance.scroller.Inner.GetComponentsInChildren<TextMeshPro>().Do(x => x.gameObject.DeepDestroy());
__instance.scroller.Inner.GetComponentsInChildren<TextMeshPro>().Do(x => x.gameObject.DeepDestroy(false));
Utilities.Extensions.ClearGarbageCollector();
var groupNameText = __instance.GetComponentInChildren<TextMeshPro>(false);
+3 -2
View File
@@ -81,9 +81,10 @@ public static class VisorsTabPatches
private static void GenerateHats(VisorsTab __instance, int page)
{
foreach (ColorChip instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy();
foreach (var instanceColorChip in __instance.ColorChips) instanceColorChip.gameObject.DeepDestroy(false);
__instance.ColorChips.Clear();
__instance.scroller.Inner.GetComponentsInChildren<TextMeshPro>().Do(x => x.gameObject.DeepDestroy());
__instance.scroller.Inner.GetComponentsInChildren<TextMeshPro>().Do(x => x.gameObject.DeepDestroy(false));
Utilities.Extensions.ClearGarbageCollector();
var groupNameText = __instance.GetComponentInChildren<TextMeshPro>(false);
@@ -59,7 +59,7 @@ public static class RoleSettingMenuPatches
{
continue;
}
obj.DeepDestroy();
obj.DeepDestroy(false);
}
Headers.Clear();
foreach (var obj in RoleOptionSettings)
@@ -68,7 +68,7 @@ public static class RoleSettingMenuPatches
{
continue;
}
obj.gameObject.DeepDestroy();
obj.gameObject.DeepDestroy(false);
}
RoleOptionSettings.Clear();
CurrentRole = null;
@@ -76,6 +76,7 @@ public static class RoleSettingMenuPatches
__instance.roleChances = new Il2CppSystem.Collections.Generic.List<RoleOptionSetting>();
__instance.advancedSettingChildren = new Il2CppSystem.Collections.Generic.List<OptionBehaviour>();
Utilities.Extensions.ClearGarbageCollector();
var maskBg = __instance.scrollBar.transform.FindChild("MaskBg");
var hitbox = __instance.scrollBar.transform.FindChild("Hitbox");
@@ -218,9 +219,9 @@ public static class RoleSettingMenuPatches
var blankLabel = quotaInst.transform.FindChild("BlankLabel").gameObject;
var chanceLabel = quotaInst.transform.FindChild("Chance Label").gameObject;
var countLabel = quotaInst.transform.FindChild("# Label").gameObject;
blankLabel.DeepDestroy();
chanceLabel.DeepDestroy();
countLabel.DeepDestroy();
blankLabel.DeepDestroy(false);
chanceLabel.DeepDestroy(false);
countLabel.DeepDestroy(false);
categoryHeaderMasked.Background.sprite = MiraAssets.CategoryHeader.LoadAsset();
categoryHeaderMasked.Background.sprite.texture.filterMode = FilterMode.Bilinear;
@@ -309,7 +310,7 @@ public static class RoleSettingMenuPatches
{
continue;
}
obj.DeepDestroy();
obj.DeepDestroy(false);
}
Headers.Clear();
foreach (var obj in RoleOptionSettings)
@@ -318,9 +319,10 @@ public static class RoleSettingMenuPatches
{
continue;
}
obj.gameObject.DeepDestroy();
obj.gameObject.DeepDestroy(false);
}
RoleOptionSettings.Clear();
Utilities.Extensions.ClearGarbageCollector();
__instance.SetQuotaTab();
}));
headerBtn.SetButtonEnableState(true);
@@ -444,11 +446,12 @@ public static class RoleSettingMenuPatches
{
foreach (var optBehaviour in __instance.AdvancedRolesSettings.GetComponentsInChildren<OptionBehaviour>())
{
optBehaviour.gameObject.DeepDestroy();
optBehaviour.gameObject.DeepDestroy(false);
}
CurrentRole = role;
__instance.advancedSettingChildren.Clear();
Utilities.Extensions.ClearGarbageCollector();
// TODO: create sub groups under the role settings.
var filteredOptions = GameSettingMenuPatches.SelectedMod?.InternalOptionGroups
+3 -2
View File
@@ -223,9 +223,10 @@ public static class Extensions
}
/// <summary>
/// Hides the object away rather than destroy it to prevent memory leaks.
/// Destroys the object properly.
/// </summary>
/// <param name="obj">The object to hide.</param>
/// <param name="obj">The object to destroy.</param>
/// <param name="clearGc">Whether to run the garbage collector immediately.</param>
public static void DeepDestroy(this GameObject obj, bool clearGc = true)
{
if (MainMenuManagerPatches.NeedsDeepDestroy)