存储和访问Controller中对象列表的最佳方法

时间:2015-02-27 17:37:22

标签: c# asp.net-mvc-4

我使用webservice从其他应用程序获取用户列表。我收到了所有信息。

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

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

使用C#和MVC

执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用MemoryCache存储内容。以下示例将用户在缓存中存储一​​小时。如果您需要按用户存储它,您可以稍微更改它,以便使用用户ID或其他内容生成缓存键(&#34;以下示例中的用户&#34;)。

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的选项