From 037c4e874032b6ce8789bf1411167604d403c772 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 13 Aug 2016 15:53:20 -0400 Subject: improve boxset & playlist performance --- .../Entities/AggregateFolder.cs | 33 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.Controller/Entities/AggregateFolder.cs') diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs index 7b42310101..4aa99ae87b 100644 --- a/MediaBrowser.Controller/Entities/AggregateFolder.cs +++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs @@ -67,6 +67,31 @@ namespace MediaBrowser.Controller.Entities return CreateResolveArgs(directoryService, true).FileSystemChildren; } + private List _childrenIds = null; + private readonly object _childIdsLock = new object(); + protected override IEnumerable LoadChildren() + { + lock (_childIdsLock) + { + if (_childrenIds == null || _childrenIds.Count == 0) + { + var list = base.LoadChildren().ToList(); + _childrenIds = list.Select(i => i.Id).ToList(); + return list; + } + + return _childrenIds.Select(LibraryManager.GetItemById).Where(i => i != null).ToList(); + } + } + + private void ResetCachedChildren() + { + lock (_childIdsLock) + { + _childrenIds = null; + } + } + private bool _requiresRefresh; public override bool RequiresRefresh() { @@ -89,6 +114,8 @@ namespace MediaBrowser.Controller.Entities public override bool BeforeMetadataRefresh() { + ResetCachedChildren(); + var changed = base.BeforeMetadataRefresh() || _requiresRefresh; _requiresRefresh = false; return changed; @@ -96,9 +123,11 @@ namespace MediaBrowser.Controller.Entities private ItemResolveArgs CreateResolveArgs(IDirectoryService directoryService, bool setPhysicalLocations) { + ResetCachedChildren(); + var path = ContainingFolderPath; - var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths , directoryService) + var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths, directoryService) { FileInfo = FileSystem.GetDirectoryInfo(path), Path = path, @@ -135,7 +164,7 @@ namespace MediaBrowser.Controller.Entities return args; } - + /// /// Adds the virtual child. /// -- cgit v1.2.3