diff options
| author | Marc Brooks <IDisposable@gmail.com> | 2026-08-04 05:32:47 -0500 |
|---|---|---|
| committer | Marc Brooks <IDisposable@gmail.com> | 2026-08-05 22:48:26 -0500 |
| commit | 812c81916234a496f02be44016c1421cb0ea076f (patch) | |
| tree | 7538b268a8c5256027a3e789fb6c62e21501551d | |
| parent | 234a49903b4424ebcbd7248739eaefeff0c7bd4d (diff) | |
Speed up search for existing item values
Replace the O(n²) array .First scan with a dictionary lookup
| -rw-r--r-- | Jellyfin.Server.Implementations/Item/ItemPersistenceService.cs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Jellyfin.Server.Implementations/Item/ItemPersistenceService.cs b/Jellyfin.Server.Implementations/Item/ItemPersistenceService.cs index 7bd92b2e4b..57adde44af 100644 --- a/Jellyfin.Server.Implementations/Item/ItemPersistenceService.cs +++ b/Jellyfin.Server.Implementations/Item/ItemPersistenceService.cs @@ -314,9 +314,11 @@ public class ItemPersistenceService : IItemPersistenceService }).ToArray(); context.ItemValues.AddRange(missingItemValues); - var itemValuesStore = existingValues.Concat(missingItemValues).ToArray(); + var itemValuesStore = existingValues + .Concat(missingItemValues) + .ToDictionary(e => (e.Type, e.Value)); var valueMap = itemValueMaps - .Select(f => (f.Item, Values: f.Values.Select(e => itemValuesStore.First(g => g.Value == e.Value && g.Type == e.MagicNumber)).DistinctBy(e => e.ItemValueId).ToArray())) + .Select(f => (f.Item, Values: f.Values.Select(e => itemValuesStore[(e.MagicNumber, e.Value)]).DistinctBy(e => e.ItemValueId).ToArray())) .ToArray(); var mappedValues = context.ItemValuesMap.Where(e => ids.Contains(e.ItemId)).ToList(); |
