From a24dd1c77867d61caf89ffd343fce85333daff51 Mon Sep 17 00:00:00 2001 From: Ayu0K <152470574+Ayu0K@users.noreply.github.com> Date: Thu, 5 Feb 2026 01:37:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20RunMulti=20?= =?UTF-8?q?=E4=B8=AD=20Mat=20=E6=89=80=E6=9C=89=E6=9D=83=E8=AF=AD=E4=B9=89?= =?UTF-8?q?=E4=B8=8D=E6=98=8E=E7=A1=AE=E5=AF=BC=E8=87=B4=E7=9A=84=E6=BD=9C?= =?UTF-8?q?=E5=9C=A8=20Dispose=20=E9=97=AE=E9=A2=98=20(#2730)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Recognition/OCR/Paddle/Rec.cs | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/BetterGenshinImpact/Core/Recognition/OCR/Paddle/Rec.cs b/BetterGenshinImpact/Core/Recognition/OCR/Paddle/Rec.cs index c167f4bf..e6641b7c 100644 --- a/BetterGenshinImpact/Core/Recognition/OCR/Paddle/Rec.cs +++ b/BetterGenshinImpact/Core/Recognition/OCR/Paddle/Rec.cs @@ -95,21 +95,33 @@ public class Rec( // .AsParallel() .Select(src => { - using var channel3 = src.Channels() switch + Mat? channel3 = default; + try { - 4 => src.CvtColor(ColorConversionCodes.BGRA2BGR), - 1 => src.CvtColor(ColorConversionCodes.GRAY2BGR), - 3 => src, - var x => throw new Exception($"Unexpect src channel: {x}, allow: (1/3/4)") - }; - var result = OcrUtils.ResizeNormImg(channel3, new OcrShape(3, maxWidth, modelHeight), - out var owner); - lock (owners) - { - owners.Add(owner); - } + channel3 = src.Channels() switch + { + 4 => src.CvtColor(ColorConversionCodes.BGRA2BGR), + 1 => src.CvtColor(ColorConversionCodes.GRAY2BGR), + 3 => src, + var x => throw new Exception($"Unexpect src channel: {x}, allow: (1/3/4)") + }; + var result = OcrUtils.ResizeNormImg(channel3, new OcrShape(3, maxWidth, modelHeight), + out var owner); + lock (owners) + { + owners.Add(owner); + } - return result; + return result; + } + finally + { + // Only dispose Mats created in this scope + if (channel3 != null && !ReferenceEquals(channel3, src)) + { + channel3.Dispose(); + } + } }) .Select(inputTensor => {