From 43f7f34b5d7ac5bad34e02ca2c244c10e6f9d14e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 15 Apr 2013 16:54:41 -0400 Subject: [PATCH] speed up ibn item retrieval --- .../Library/LibraryManager.cs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 6436e77167..eccaf2da43 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -574,7 +574,7 @@ namespace MediaBrowser.Server.Implementations.Library /// /// The images by name item cache /// - private readonly ConcurrentDictionary _imagesByNameItemCache = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + private readonly ConcurrentDictionary _imagesByNameItemCache = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); /// /// Generically retrieves an IBN item @@ -588,7 +588,7 @@ namespace MediaBrowser.Server.Implementations.Library /// Task{``0}. /// /// - private Task GetImagesByNameItem(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true, bool forceCreation = false) + private async Task GetImagesByNameItem(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true, bool forceCreation = false) where T : BaseItem, new() { if (string.IsNullOrEmpty(path)) @@ -603,18 +603,16 @@ namespace MediaBrowser.Server.Implementations.Library var key = Path.Combine(path, FileSystem.GetValidFilename(name)); - if (forceCreation) + BaseItem obj; + + if (forceCreation || !_imagesByNameItemCache.TryGetValue(key, out obj)) { - var task = CreateImagesByNameItem(path, name, cancellationToken, allowSlowProviders); + obj = await CreateImagesByNameItem(path, name, cancellationToken, allowSlowProviders).ConfigureAwait(false); - _imagesByNameItemCache.AddOrUpdate(key, task, (keyName, oldValue) => task); - - return task; + _imagesByNameItemCache.AddOrUpdate(key, obj, (keyName, oldValue) => obj); } - var obj = _imagesByNameItemCache.GetOrAdd(key, keyname => CreateImagesByNameItem(path, name, cancellationToken, allowSlowProviders)); - - return obj as Task; + return obj as T; } ///