ASP.NET配置文件数据缓存?

时间:2010-08-11 15:08:38

标签: .net asp.net asp.net-profiles

ASP.NET SQL配置文件提供程序是否使用缓存?我的意思是,如果我从用户的配置文件中提取数据,它会针对每个请求点击数据库吗?

我正在寻找关于此的设置或任何信息。我以为我读过它会使用cookies但我现在找不到它。

编辑:

http://msdn.microsoft.com/en-us/library/aa478953.aspx将流程描述为

当由SqlProfileProvider.GetPropertyValues调用时,aspnet_Profile_GetProperties执行以下操作:

  1. 查询aspnet_Applications表,将输入的应用程序名称转换为应用程序ID。
  2. 查询aspnet_Users表,将输入的用户名转换为用户ID。
  3. 在aspnet_Profile表中查询指定用户的PropertyNames,PropertyValuesString和PropertyValuesBinary字段。
  4. 使用当前日期和时间更新用户在aspnet_Users表中的上一个活动日期。

2 个答案:

答案 0 :(得分:2)

来自MSDN

  

当您的应用程序运行时,ASP.NET   创建一个ProfileCommon类   是一个动态生成的类   继承ProfileBase类。该   动态ProfileCommon类包括   从配置文件创建的属性   您指定的属性定义   你的应用配置。一个   这个动态ProfileCommon的实例   然后将class设置为的值   当前的配置文件属性   HttpContext并可用于页面   在你的申请中。

看来Profile对象附加到请求的当前HttpContext。因此,除非您创建新的HttpContext,否则将在第一次请求时加载和存储配置文件数据。

编辑 - 艾伦提出了一些好处,在此澄清 - >在每个HttpRequest上查询配置文件数据(例如,在创建新的HttpContext时)。但是在每个请求中,对配置文件提供程序的不同属性的调用不会在第一次调用时继续访问数据库。

答案 1 :(得分:1)

是和否

提供程序在访问配置文件数据的每个请求中使用“缓存”一次。如果在任何给定请求期间未访问配置文件数据,则不会查询它。但是,如果您在一个请求期间多次访问配置文件数据(并且不更新它),那么它只会查询一次。

重要的一点是:如果您在每个请求上访问配置文件数据,那么每次请求您的配置文件数据时,asp.net都会查询数据库一次!

要专门回答您的问题:“如果我从用户的个人资料中提取数据,它会针对每个 [http] 请求点击数据库吗?” 是的,它每次都会打到数据库。

您可能可以构建自己的提供程序来执行某种形式的基于会话的缓存,因此您并不总是调用数据库来查找用户配置文件数据。以下是关于该主题的精彩文章: Optimizing ASP.NET Profiles Performance