Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 2-避免重复查询数据库中的静态数据?_C#_Asp.net Mvc_Performance_Session_Caching - Fatal编程技术网

C# ASP.NET MVC 2-避免重复查询数据库中的静态数据?

C# ASP.NET MVC 2-避免重复查询数据库中的静态数据?,c#,asp.net-mvc,performance,session,caching,C#,Asp.net Mvc,Performance,Session,Caching,如何避免每次在ASP.NET MVC2中加载页面时重复加载静态数据?这是相当浪费的,我想修复它 我的母版页在右上角显示典型的用户名+公司名称。但由于MVC的无状态特性,每次加载页面时都必须查找这些数据,即使页面从未更改 在旧的webforms时代,我只想把它放到会话中,但在MVC中这似乎是不被鼓励的。另外,这个web应用程序在一个webfarm上运行,所以我真的不想使用session web应用程序已经有相当多的静态数据项,在每次页面加载时都会被查询到(用户货币、用户税率等),因此我认为在登录时

如何避免每次在ASP.NET MVC2中加载页面时重复加载静态数据?这是相当浪费的,我想修复它

我的母版页在右上角显示典型的用户名+公司名称。但由于MVC的无状态特性,每次加载页面时都必须查找这些数据,即使页面从未更改

在旧的webforms时代,我只想把它放到会话中,但在MVC中这似乎是不被鼓励的。另外,这个web应用程序在一个webfarm上运行,所以我真的不想使用session


web应用程序已经有相当多的静态数据项,在每次页面加载时都会被查询到(用户货币、用户税率等),因此我认为在登录时只加载一次就可以提高性能。我只是不确定正确的MVC方法是什么(我对MVC还是很陌生)。

我总是使用内置的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);
}
另见上一个问题:


您是否可以将您的用户货币/用户名/税务等封装到用户控件中,然后在该控件上使用输出缓存?

请看一下在.NET中使用ProfileProvider。在这些情况下效果很好,创建您自己的配置文件提供程序来实现现有的表/列,然后从那里开始。配置文件是否会在每次加载配置文件对象时调用DB?如果是这样,它不会改变任何东西。在MVC中使用(与错误使用相反)
Session
没有什么错。它是浏览器实例特定的缓存。当你需要的时候,使用它。只是不要把任何与安全相关的东西放在那里,也不要假设它与登录有关。这在web场场景中的效果如何?我猜缓存在内存中?因此,如果用户从一个web框推送到另一个web框,缓存将消失?默认缓存在内存中是。一般来说,在每台机器上请求一次信息并不是那么糟糕——它仍然比以前少得多的查询。但是,假设这很难计算信息,因此请求需要很长时间。然后,您可以查看Velocity或Memcached,它们是分布式缓存。这些都可以从ASP.NET MVC中使用,并允许您共享缓存,但访问速度比内存中的慢。数据还需要在控制器中可用,因此这种方式可能不起作用。