Răsfoiți Sursa

Use MemoryCache in DeviceManager

Patrick Barron 4 ani în urmă
părinte
comite
a97f98fbd5
1 a modificat fișierele cu 12 adăugiri și 11 ștergeri
  1. 12 11
      Emby.Server.Implementations/Devices/DeviceManager.cs

+ 12 - 11
Emby.Server.Implementations/Devices/DeviceManager.cs

@@ -5,8 +5,8 @@ using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
 using System.Linq;
-using Jellyfin.Data.Enums;
 using Jellyfin.Data.Entities;
+using Jellyfin.Data.Enums;
 using MediaBrowser.Common.Extensions;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Devices;
@@ -17,16 +17,17 @@ using MediaBrowser.Model.Events;
 using MediaBrowser.Model.Querying;
 using MediaBrowser.Model.Serialization;
 using MediaBrowser.Model.Session;
+using Microsoft.Extensions.Caching.Memory;
 
 namespace Emby.Server.Implementations.Devices
 {
     public class DeviceManager : IDeviceManager
     {
+        private readonly IMemoryCache _memoryCache;
         private readonly IJsonSerializer _json;
         private readonly IUserManager _userManager;
         private readonly IServerConfigurationManager _config;
         private readonly IAuthenticationRepository _authRepo;
-        private readonly Dictionary<string, ClientCapabilities> _capabilitiesCache;
         private readonly object _capabilitiesSyncLock = new object();
 
         public event EventHandler<GenericEventArgs<Tuple<string, DeviceOptions>>> DeviceOptionsUpdated;
@@ -35,13 +36,14 @@ namespace Emby.Server.Implementations.Devices
             IAuthenticationRepository authRepo,
             IJsonSerializer json,
             IUserManager userManager,
-            IServerConfigurationManager config)
+            IServerConfigurationManager config,
+            IMemoryCache memoryCache)
         {
             _json = json;
             _userManager = userManager;
             _config = config;
+            _memoryCache = memoryCache;
             _authRepo = authRepo;
-            _capabilitiesCache = new Dictionary<string, ClientCapabilities>(StringComparer.OrdinalIgnoreCase);
         }
 
         public void SaveCapabilities(string deviceId, ClientCapabilities capabilities)
@@ -51,8 +53,7 @@ namespace Emby.Server.Implementations.Devices
 
             lock (_capabilitiesSyncLock)
             {
-                _capabilitiesCache[deviceId] = capabilities;
-
+                _memoryCache.CreateEntry(deviceId).SetValue(capabilities);
                 _json.SerializeToFile(capabilities, path);
             }
         }
@@ -71,13 +72,13 @@ namespace Emby.Server.Implementations.Devices
 
         public ClientCapabilities GetCapabilities(string id)
         {
-            lock (_capabilitiesSyncLock)
+            if (_memoryCache.TryGetValue(id, out ClientCapabilities result))
             {
-                if (_capabilitiesCache.TryGetValue(id, out var result))
-                {
-                    return result;
-                }
+                return result;
+            }
 
+            lock (_capabilitiesSyncLock)
+            {
                 var path = Path.Combine(GetDevicePath(id), "capabilities.json");
                 try
                 {