Browse Source

Clear dictionaries when not needed, use set for finding existing base items (#13749)

Fernando Fernández 2 tháng trước cách đây
mục cha
commit
c77a0719c2
1 tập tin đã thay đổi với 8 bổ sung2 xóa
  1. 8 2
      Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs

+ 8 - 2
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<string, UserData>();
 
         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<string, (People Person, List<PeopleBaseItemMap> 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;