缓存任何人的想法?

时间:2009-11-25 16:17:11

标签: c# asp.net asp.net-mvc design-patterns

我有以下非常有趣的课程......

pubilc class Thing{

public Thing()
{
    DoSomethingThatTakesALongTime();
}

public boolean CheckSomething(string criteria)
{
    return  criteria == "something";
} }

在我的ASP.Net MVC应用程序中,我需要经常拨打CheckSomething

如您所见,构造函数需要很长时间才能加载。

我可以使用哪些方法来缓存课程?请记住,我想让它保持可测试......而且我不知道那会带来什么!!!!

干杯,

ETFairfax

3 个答案:

答案 0 :(得分:2)

您可以创建该类的静态实例。

某处:

public static Thing singleThing = new Thing ();

现在,在第一次访问给定应用程序域的singleThing变量时,构造函数将会运行。完成此操作后,对象将保留在内存中,直到应用程序域结束(服务器重新启动,代码更新,web.config中的更改,回收等)。这意味着一旦初始化的对象将可供您的应用程序的所有客户端使用。

答案 1 :(得分:2)

您可以使用工厂模式创建它(Flyweight模式以共享内存)

创建一个返回该类实例的Factory。工厂看起来像这样

如果缓存中的实例

  • 返回缓存的实例

如果不是

  • 创建实例
  • 缓存实例
  • 返回实例

对于缓存,您可以使用HttpContext Cache或Enterprise Library Cache。

修改

有趣的讨论下面是哪种模式。

我的理解如下:

  • 我要求创建对象的东西,有些东西是工厂,因此是工厂模式。
  • 我尝试在内存中重用一个对象,flyweight模式。这个例子中的python代码看起来非常像我的答案:http://en.wikipedia.org/wiki/Flyweight_pattern
  • 但是对象只有一个实例,因此是单例模式
  • 存储对象的缓存也是单例

答案 2 :(得分:0)

如果你的东西类对你的应用程序做了全局的事情(不依赖于会话),只需使类静态或将实例添加到缓存中(HttpContext.Cache)