From 42741c2cb2aee72d06c4ebd43cff72099a4a114bf9fbe3e9c3c280100b1b1314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4DELTA?= Date: Wed, 27 May 2026 15:44:55 +0900 Subject: [PATCH] Fix Little Memory Leaks --- Component/RenderManager.cs | 13 ++++++++++++- Util/FrameReader.cs | 6 ++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Component/RenderManager.cs b/Component/RenderManager.cs index 9367fdc..a33c425 100644 --- a/Component/RenderManager.cs +++ b/Component/RenderManager.cs @@ -22,7 +22,8 @@ namespace ADOFAIRenderer.Component private static GameObject? _debugMonitorObj; private static GameObject? _escapeHandlerObj; private static string? _currentOutPath; - + + private static bool _isRenderCancelled = false; public static RenderSettings Configuration; public struct RenderSettings @@ -291,6 +292,11 @@ namespace ADOFAIRenderer.Component continue; } + if (_isRenderCancelled) + { + break; + } + if (EndRequested) { bool hasMore; @@ -319,6 +325,8 @@ namespace ADOFAIRenderer.Component public void CancelRender() { RenderMod.IsRendering = RenderMod.IsCapturing = false; + _isRenderCancelled = true; + StopFFmpeg(false); EndRender(); } @@ -353,6 +361,8 @@ namespace ADOFAIRenderer.Component } ImageQueue.Clear(); } + + RenderMod.FrameReader?.Dispose(); // 디버그 모니터 UI 정리 if (_debugMonitorObj) @@ -423,6 +433,7 @@ namespace ADOFAIRenderer.Component GCS.customLevelPaths = null; GCS.customLevelId = null; + RenderMod.FrameReader?.Dispose(); ADOBase.loader.LoadSceneWithTransition(WipeDirection.StartsFromRight, "scnEditor"); } } diff --git a/Util/FrameReader.cs b/Util/FrameReader.cs index 695d47d..992e6bc 100644 --- a/Util/FrameReader.cs +++ b/Util/FrameReader.cs @@ -104,6 +104,12 @@ namespace ADOFAIRenderer.Util private void RecycleState(ReadbackRequestState state) { + if (!_isInitialized) + { + state.Dispose(); + return; + } + state.Recycle(); lock (_poolLock) {