From f80c1d93c0f20d9d905ffd4170297959a942ad6d Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 9 May 2016 00:56:41 -0400 Subject: update user queries --- .../Library/UserDataManager.cs | 30 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Library/UserDataManager.cs') diff --git a/MediaBrowser.Server.Implementations/Library/UserDataManager.cs b/MediaBrowser.Server.Implementations/Library/UserDataManager.cs index d3aad20f5..0fabbf54a 100644 --- a/MediaBrowser.Server.Implementations/Library/UserDataManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserDataManager.cs @@ -22,7 +22,7 @@ namespace MediaBrowser.Server.Implementations.Library { public event EventHandler UserDataSaved; - private readonly ConcurrentDictionary _userData = new ConcurrentDictionary(); + private readonly Dictionary _userData = new Dictionary(StringComparer.OrdinalIgnoreCase); private readonly ILogger _logger; private readonly IServerConfigurationManager _config; @@ -66,8 +66,10 @@ namespace MediaBrowser.Server.Implementations.Library var newValue = userData; - // Once it succeeds, put it into the dictionary to make it available to everyone else - _userData.AddOrUpdate(GetCacheKey(userId, key), newValue, delegate { return newValue; }); + lock (_userData) + { + _userData[GetCacheKey(userId, key)] = newValue; + } } catch (Exception ex) { @@ -154,13 +156,33 @@ namespace MediaBrowser.Server.Implementations.Library throw new ArgumentNullException("key"); } - return _userData.GetOrAdd(GetCacheKey(userId, key), keyName => GetUserDataFromRepository(userId, key)); + lock (_userData) + { + var cacheKey = GetCacheKey(userId, key); + UserItemData value; + if (_userData.TryGetValue(cacheKey, out value)) + { + return value; + } + + value = GetUserDataFromRepository(userId, key); + _userData[cacheKey] = value; + return value; + } } private UserItemData GetUserDataFromRepository(Guid userId, string key) { var data = Repository.GetUserData(userId, key); + if (data == null) + { + data = new UserItemData + { + UserId = userId, + Key = key + }; + } return data; } -- cgit v1.2.3