在控制器中存储和访问对象列表的最佳方式

Best way to store and access List of Objects in Controller

我正在使用网络服务从其他应用程序获取用户列表。我正在获取所有信息。

  List<User> users = ws.SelectUsers();

我想在控制器操作之间存储此用户列表,这样我就不想每次都为他们的角色和其他信息访问 Web 服务。

使用 C# 和 MVC 执行此操作的最佳方法是什么

你可以使用MemoryCache来存储东西。下面的示例将在缓存中存储用户一个小时。如果您需要基于每个用户存储它,您可以稍微更改它,以便使用用户 ID 或其他内容生成缓存键("Users" 在下面的示例中)。

MemoryCache cache = MemoryCache.Default;
string baseCacheKey = "Users";

public void DoSomethingWithUsers(int userId)
{
    var cacheKey = baseCacheKey + userId.ToString();
    if (!cache.Contains(cacheKey))
    {
        RefreshUserCache(userId);
    }
    var users = cache.Get(cacheKey) as List<User>

    // You can do something with the users here
}

public static RefreshUserCache(int userId)
{
    var users = ws.SelectUsers();

    var cacheItemPolicy = new CacheItemPolicy();
    cacheItemPolicy.AbsoluteExpiration = DateTime.Now.AddHours(1);
    var cacheKey = baseCacheKey + userId.ToString();
    cache.Add(cacheKey, users , cacheItemPolicy);
}

编辑:如果您想为每个用户执行此操作,我已经包含了 userId 选项