【发布时间】:2012-05-02 19:36:48
【问题描述】:
使用网络方法,使用“CacheDuration”属性缓存结果非常简单。是否有类似的“简单”方法来根据参数缓存非 webmethod 输出(或静态方法)?
如果有任何帮助,我将不胜感激。提前致谢!
【问题讨论】:
使用网络方法,使用“CacheDuration”属性缓存结果非常简单。是否有类似的“简单”方法来根据参数缓存非 webmethod 输出(或静态方法)?
如果有任何帮助,我将不胜感激。提前致谢!
【问题讨论】:
实现缓存的最简单方法是使用类中的 Dictionary 或类似数据结构将结果保存在内存中以供连续调用。
public class CachedDatastore
{
private Dictionary<string, object> cache = new Dictionary<string, object>();
public void FindById(string id)
{
if (!cache.ContainsKey(id))
{
var data = GetDataFromDatabase(id);
cache[id] = data;
}
return cache[id];
}
}
如果您想尝试自己实现某些东西,这只是一个基本示例。它不支持随时缓存“驱逐”或重新加载数据。如果您需要更高级的功能,我建议您在 .NET 框架中寻找缓存类或其他 3rd 方库。
【讨论】:
此问题类似于:Is there anyway to cache function/method in C#
您想要的正确术语是memoization。维基百科提供了有关此主题的更多详细信息。不幸的是,没有引用支持它的 C# 库。有多种方法可以自己实现。但由于我没有 C# 经验,我无法提供更多细节。可以使用的一些技术:AOP、注释、代理。
【讨论】: