From c77a0719c28ec6744c0618c18e93f2b36c7d95f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Fern=C3=A1ndez?= Date: Sun, 23 Mar 2025 01:30:32 +0100 Subject: [PATCH] Clear dictionaries when not needed, use set for finding existing base items (#13749) --- .../Migrations/Routines/MigrateLibraryDb.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs b/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs index dfe497c490..d2fbcbec94 100644 --- a/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs +++ b/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs @@ -163,7 +163,6 @@ public class MigrateLibraryDb : IMigrationRoutine dbContext.UserData.ExecuteDelete(); var users = dbContext.Users.AsNoTracking().ToImmutableArray(); - var oldUserdata = new Dictionary(); foreach (var entity in queryResult) { @@ -184,6 +183,8 @@ public class MigrateLibraryDb : IMigrationRoutine dbContext.UserData.Add(userData); } + users.Clear(); + legacyBaseItemWithUserKeys.Clear(); _logger.LogInformation("Try saving {0} UserData entries.", dbContext.UserData.Local.Count); dbContext.SaveChanges(); @@ -220,11 +221,12 @@ public class MigrateLibraryDb : IMigrationRoutine dbContext.PeopleBaseItemMap.ExecuteDelete(); var peopleCache = new Dictionary Items)>(); + var baseItemIds = dbContext.BaseItems.Select(b => b.Id).ToHashSet(); foreach (SqliteDataReader reader in connection.Query(personsQuery)) { var itemId = reader.GetGuid(0); - if (!dbContext.BaseItems.Any(f => f.Id == itemId)) + if (!baseItemIds.Contains(itemId)) { _logger.LogError("Dont save person {0} because its not in use by any BaseItem", reader.GetString(1)); continue; @@ -256,12 +258,16 @@ public class MigrateLibraryDb : IMigrationRoutine }); } + baseItemIds.Clear(); + foreach (var item in peopleCache) { dbContext.Peoples.Add(item.Value.Person); dbContext.PeopleBaseItemMap.AddRange(item.Value.Items.DistinctBy(e => (e.ItemId, e.PeopleId))); } + peopleCache.Clear(); + _logger.LogInformation("Try saving {0} People entries.", dbContext.MediaStreamInfos.Local.Count); dbContext.SaveChanges(); migrationTotalTime += stopwatch.Elapsed;