aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-15 16:54:41 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-15 16:54:41 -0400
commit43f7f34b5d7ac5bad34e02ca2c244c10e6f9d14e (patch)
treedd6d797a8dc47e142d0ab5a01bf780bd1c3e7ede
parent0fc61585002747238226b688dfc3294be6e96fec (diff)
speed up ibn item retrieval
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs18
1 files changed, 8 insertions, 10 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 6436e7716..eccaf2da4 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -574,7 +574,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <summary>
/// The images by name item cache
/// </summary>
- private readonly ConcurrentDictionary<string, object> _imagesByNameItemCache = new ConcurrentDictionary<string, object>(StringComparer.OrdinalIgnoreCase);
+ private readonly ConcurrentDictionary<string, BaseItem> _imagesByNameItemCache = new ConcurrentDictionary<string, BaseItem>(StringComparer.OrdinalIgnoreCase);
/// <summary>
/// Generically retrieves an IBN item
@@ -588,7 +588,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <returns>Task{``0}.</returns>
/// <exception cref="System.ArgumentNullException">
/// </exception>
- private Task<T> GetImagesByNameItem<T>(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true, bool forceCreation = false)
+ private async Task<T> GetImagesByNameItem<T>(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)
- {
- var task = CreateImagesByNameItem<T>(path, name, cancellationToken, allowSlowProviders);
+ BaseItem obj;
- _imagesByNameItemCache.AddOrUpdate(key, task, (keyName, oldValue) => task);
+ if (forceCreation || !_imagesByNameItemCache.TryGetValue(key, out obj))
+ {
+ obj = await CreateImagesByNameItem<T>(path, name, cancellationToken, allowSlowProviders).ConfigureAwait(false);
- return task;
+ _imagesByNameItemCache.AddOrUpdate(key, obj, (keyName, oldValue) => obj);
}
- var obj = _imagesByNameItemCache.GetOrAdd(key, keyname => CreateImagesByNameItem<T>(path, name, cancellationToken, allowSlowProviders));
-
- return obj as Task<T>;
+ return obj as T;
}
/// <summary>