在控制器中存储和访问对象列表的最佳方式
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 选项
我正在使用网络服务从其他应用程序获取用户列表。我正在获取所有信息。
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 选项