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

This commit is contained in:
Fernando Fernández 2025-03-23 01:30:32 +01:00 committed by GitHub
parent 350983e03c
commit c77a0719c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -163,7 +163,6 @@ public class MigrateLibraryDb : IMigrationRoutine
dbContext.UserData.ExecuteDelete(); dbContext.UserData.ExecuteDelete();
var users = dbContext.Users.AsNoTracking().ToImmutableArray(); var users = dbContext.Users.AsNoTracking().ToImmutableArray();
var oldUserdata = new Dictionary<string, UserData>();
foreach (var entity in queryResult) foreach (var entity in queryResult)
{ {
@ -184,6 +183,8 @@ public class MigrateLibraryDb : IMigrationRoutine
dbContext.UserData.Add(userData); dbContext.UserData.Add(userData);
} }
users.Clear();
legacyBaseItemWithUserKeys.Clear();
_logger.LogInformation("Try saving {0} UserData entries.", dbContext.UserData.Local.Count); _logger.LogInformation("Try saving {0} UserData entries.", dbContext.UserData.Local.Count);
dbContext.SaveChanges(); dbContext.SaveChanges();
@ -220,11 +221,12 @@ public class MigrateLibraryDb : IMigrationRoutine
dbContext.PeopleBaseItemMap.ExecuteDelete(); dbContext.PeopleBaseItemMap.ExecuteDelete();
var peopleCache = new Dictionary<string, (People Person, List<PeopleBaseItemMap> Items)>(); 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)) foreach (SqliteDataReader reader in connection.Query(personsQuery))
{ {
var itemId = reader.GetGuid(0); 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)); _logger.LogError("Dont save person {0} because its not in use by any BaseItem", reader.GetString(1));
continue; continue;
@ -256,12 +258,16 @@ public class MigrateLibraryDb : IMigrationRoutine
}); });
} }
baseItemIds.Clear();
foreach (var item in peopleCache) foreach (var item in peopleCache)
{ {
dbContext.Peoples.Add(item.Value.Person); dbContext.Peoples.Add(item.Value.Person);
dbContext.PeopleBaseItemMap.AddRange(item.Value.Items.DistinctBy(e => (e.ItemId, e.PeopleId))); 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); _logger.LogInformation("Try saving {0} People entries.", dbContext.MediaStreamInfos.Local.Count);
dbContext.SaveChanges(); dbContext.SaveChanges();
migrationTotalTime += stopwatch.Elapsed; migrationTotalTime += stopwatch.Elapsed;