From 803e8b4a2eb5fcf1b5a3679fe551d541620d4743 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 11 Sep 2013 13:54:59 -0400 Subject: improved performance of item counts --- .../Library/Validators/PeoplePostScanTask.cs | 52 ++++++++++------------ 1 file changed, 24 insertions(+), 28 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs') diff --git a/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs index 7d7728030..708f8bfa4 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/PeoplePostScanTask.cs @@ -39,7 +39,13 @@ namespace MediaBrowser.Server.Implementations.Library.Validators /// The progress. /// The cancellation token. /// Task. - public async Task Run(IProgress progress, CancellationToken cancellationToken) + public Task Run(IProgress progress, CancellationToken cancellationToken) + { + return RunInternal(progress, cancellationToken); + //return Task.Run(() => RunInternal(progress, cancellationToken)); + } + + private async Task RunInternal(IProgress progress, CancellationToken cancellationToken) { var allItems = _libraryManager.RootFolder.RecursiveChildren.ToList(); @@ -49,10 +55,10 @@ namespace MediaBrowser.Server.Implementations.Library.Validators var allLibraryItems = allItems; - var masterDictionary = new Dictionary>>(StringComparer.OrdinalIgnoreCase); + var masterDictionary = new Dictionary>>(StringComparer.OrdinalIgnoreCase); // Populate counts of items - SetItemCounts(null, allLibraryItems, masterDictionary); + //SetItemCounts(null, allLibraryItems, masterDictionary); progress.Report(2); @@ -74,16 +80,25 @@ namespace MediaBrowser.Server.Implementations.Library.Validators progress.Report(10); - var names = masterDictionary.Keys.ToList(); + var count = masterDictionary.Count; numComplete = 0; - foreach (var name in names) + foreach (var name in masterDictionary.Keys) { cancellationToken.ThrowIfCancellationRequested(); - + try { - await UpdateItemByNameCounts(name, masterDictionary[name]).ConfigureAwait(false); + var counts = masterDictionary[name]; + + var itemByName = await _libraryManager.GetPerson(name).ConfigureAwait(false); + + foreach (var libraryId in counts.Keys) + { + var itemCounts = CountHelpers.GetCounts(counts[libraryId]); + + itemByName.UserItemCounts[libraryId] = itemCounts; + } } catch (Exception ex) { @@ -92,7 +107,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators numComplete++; double percent = numComplete; - percent /= names.Count; + percent /= count; percent *= 90; progress.Report(percent + 10); @@ -101,26 +116,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators progress.Report(100); } - private async Task UpdateItemByNameCounts(string name, Dictionary> counts) - { - var itemByName = await _libraryManager.GetPerson(name).ConfigureAwait(false); - - foreach (var libraryId in counts.Keys.ToList()) - { - var itemCounts = CountHelpers.GetCounts(counts[libraryId]); - - if (libraryId == Guid.Empty) - { - itemByName.ItemCounts = itemCounts; - } - else - { - itemByName.UserItemCounts[libraryId] = itemCounts; - } - } - } - - private void SetItemCounts(Guid? userId, IEnumerable allItems, Dictionary>> masterDictionary) + private void SetItemCounts(Guid userId, IEnumerable allItems, Dictionary>> masterDictionary) { foreach (var media in allItems) { -- cgit v1.2.3