From a7c5c207c8ec55dbf703aa4a8c43eea9a947b6e6 Mon Sep 17 00:00:00 2001 From: Anjo <87346264+AnAndroNerd@users.noreply.github.com> Date: Fri, 7 Aug 2026 23:23:35 -0700 Subject: [PATCH] 1 --- OpenUtau.Core/Classic/ClassicSinger.cs | 7 ++++++- OpenUtau.Core/SingerManager.cs | 4 ++++ OpenUtau/ViewModels/TrackHeaderViewModel.cs | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/OpenUtau.Core/Classic/ClassicSinger.cs b/OpenUtau.Core/Classic/ClassicSinger.cs index 4c3d6b2b1..3381a3ac3 100644 --- a/OpenUtau.Core/Classic/ClassicSinger.cs +++ b/OpenUtau.Core/Classic/ClassicSinger.cs @@ -10,7 +10,7 @@ using WanaKanaNet; namespace OpenUtau.Classic { - public class ClassicSinger : USinger { + public class ClassicSinger : USinger, IDisposable { public override string Id => voicebank.Id; public override string Name => voicebank.Name; public override Dictionary LocalizedNames => voicebank.LocalizedNames; @@ -160,6 +160,11 @@ public override void Save() { otoWatcher.Paused = false; } } + + public void Dispose() { + otoWatcher?.Dispose(); + otoWatcher = null; + } public override bool TryGetOto(string phoneme, out UOto oto) { if (otoMap.TryGetValue(phoneme, out oto)) { diff --git a/OpenUtau.Core/SingerManager.cs b/OpenUtau.Core/SingerManager.cs index 829155144..9e02168cb 100644 --- a/OpenUtau.Core/SingerManager.cs +++ b/OpenUtau.Core/SingerManager.cs @@ -29,6 +29,7 @@ public void SearchAllSingers() { Log.Information("Searching singers."); Directory.CreateDirectory(PathManager.Inst.SingersPath); var stopWatch = Stopwatch.StartNew(); + var oldSingers = Singers.Values.ToList(); var singers = ClassicSingerLoader.FindAllSingers() .Concat(Vogen.VogenSingerLoader.FindAllSingers()) .Distinct(); @@ -38,6 +39,9 @@ public void SearchAllSingers() { SingerGroups = singers .GroupBy(s => s.SingerType) .ToDictionary(s => s.Key, s => s.LocalizedOrderBy(singer => singer.LocalizedName).ToList()); + foreach (var old in oldSingers) { + (old as IDisposable)?.Dispose(); + } stopWatch.Stop(); Log.Information($"Search all singers: {stopWatch.Elapsed}"); } diff --git a/OpenUtau/ViewModels/TrackHeaderViewModel.cs b/OpenUtau/ViewModels/TrackHeaderViewModel.cs index 7bbde4843..d828f7c7a 100644 --- a/OpenUtau/ViewModels/TrackHeaderViewModel.cs +++ b/OpenUtau/ViewModels/TrackHeaderViewModel.cs @@ -466,6 +466,7 @@ public void RefreshRenderers() { public void RefreshAvatar() { var singer = track?.Singer; + Avatar?.Dispose(); if (singer == null || singer.AvatarData == null) { Avatar = new RenderTargetBitmap(new PixelSize(1, 1)); return;