2010-08-25 31 views
1

我该怎么做才能避免每次在ASP.NET MVC2中加载页面时重复加载静态数据?这很浪费,我想解决它。ASP.NET MVC 2 - 避免重复查询数据库中的静态数据?

我的主页在右上角显示了典型的用户名+公司名称。但是由于MVC的无状态特性,每次加载页面时都必须查看这些数据,即使它永远不会改变。

在旧的webforms天,我只是把它扔进会议,但似乎在MVC劝阻。另外Web应用程序运行在一个webfarm上,所以我真的不想使用会话。

网络应用程序已经有相当多的静态数据项在每个页面加载时被查询(用户货币,用户税率等),所以我认为只有在登录时加载一次才能获得性能提升。我只是不确定什么是正确的MVC方法(我对MVC还是比较新的)。

+0

看看在.NET中使用ProfileProvider。对于这些情况非常有用,可以创建自己的配置文件提供程序来实现现有的表/列,然后从那里开始。 – Tommy 2010-08-25 10:49:56

+0

每次加载配置文件对象时,Profile都会调用数据库吗?如果是这样,它不会改变任何东西。 – 2010-08-25 11:13:14

+0

在MVC中使用(而不是* mis * -using)'Session'没有任何问题。这是一个浏览器实例特定的缓存。当你需要时,使用它。不要在那里放置任何与安全有关的东西,也不要认为它与登录相关。 – 2010-08-25 13:01:50

回答

3

我总是为此使用内置的ASP.NET缓存,适当地设置到期日期,并且您很好。

public void Blah() 
{ 
    var company = HttpRuntime.Cache.Get("Company") as string; 
    if (company == null) 
    { 
     company = FetchCompanyFromDb(); 
     HttpRuntime.Cache["Company"] = company; 
    } 

    return this.View(company); 
} 

也看到前面的问题:

Caching in asp.net-mvc

+0

在Web场景中工作的效果如何?我猜这是缓存在内存中?因此,如果用户从一个网络盒子被推到另一个网络盒子,缓存将会消失? – 2010-08-25 11:12:17

+0

默认缓存在内存中是。通常每台计算机请求一次信息并不是那么糟糕 - 它的查询数量仍然远远少于以前。 但是,假设这很难计算信息,所以请求需要很长时间。然后,您可以查看分布式缓存的Velocity或Memcached。这些都可以在ASP.NET MVC中使用,并允许您共享缓存,但访问速度比内存缓存要慢。 – 2010-08-25 11:23:06

0

你能也许封装您的用户的货币/用户名/税务等为用户控件,然后使用输出缓存上呢?

+0

数据也需要在控制器中可用,所以这种方式可能不会工作。 – 2010-08-25 11:14:31