【问题标题】:How to cache method results in .Net如何在.Net中缓存方法结果
【发布时间】:2012-05-02 19:36:48
【问题描述】:

使用网络方法,使用“CacheDuration”属性缓存结果非常简单。是否有类似的“简单”方法来根据参数缓存非 webmethod 输出(或静态方法)?

如果有任何帮助,我将不胜感激。提前致谢!

【问题讨论】:

    标签: .net caching methods


    【解决方案1】:

    实现缓存的最简单方法是使用类中的 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 方库。

    【讨论】:

    • 你好,安迪。感谢您的回复,但我一直在寻找一种更简单的方法来实现许多不同的方法,而不必单独执行它们。例如,注释某个属性的静态方法,以启用该方法的缓存,类似于 WebMethod 的“CacheDuration”。还有另一种我想念的简单方法吗?如果没有,是否有可以实现此目的的属性编程示例?提前致谢。
    【解决方案2】:

    此问题类似于:Is there anyway to cache function/method in C#

    您想要的正确术语是memoization。维基百科提供了有关此主题的更多详细信息。不幸的是,没有引用支持它的 C# 库。有多种方法可以自己实现。但由于我没有 C# 经验,我无法提供更多细节。可以使用的一些技术:AOP、注释、代理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      相关资源
      最近更新 更多