3

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

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

编辑:

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 表中用户的最后活动日期。
4

2 回答 2

2

来自MSDN

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

Profile 对象似乎附加到请求的当前 HttpContext 上。因此,除非您创建新的 HttpContext,否则配置文件数据会在第一次请求时加载并存储在这里。

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

于 2010-08-11T15:19:18.817 回答
1

是与否

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

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

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

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

于 2012-06-13T23:59:14.523 回答