存储常用值的最佳方法

时间:2009-01-11 18:14:20

标签: asp.net optimization

在我的Webforms 3.5应用程序中,我有一个用户的GridView,显示他们上次登录的时间。该值以UTC格式存储在Users表中。当管理员查看网格时,我希望他们查看管理员在其首选项中选择的时区(也存储在“用户”表中)。

我对GridView正常工作:

<ItemTemplate>
    <%# TimeZoneInfo.ConvertTimeFromUtc(Eval("LastLoginDateTimeUTC"), TimeZoneInfo.FindSystemTimeZoneById(UserService.GetUser(HttpContext.Current.User.Identity.Name).DisplayTimeZone))%>
</ItemTemplate>

因此,在这种情况下,每次创建一行时,都会创建一个用户对象。

我想要做的是确定处理返回常用用户特定数据(例如user.DisplayTimeZone)的最佳方法。我有几个想法,但我想得到一些其他人如何做的意见。我正在考虑使用用户特定缓存,但在我有更多想法之前不想实现。

我想避免使用Session对象,但这不是必需的。我更喜欢使用HttpRuntime.Cache。

此外,一旦确定,这个代码应该放在哪里?在一个BasePage类?在MasterPage?在MVP BasePresenter中?

由于 382 4

1 个答案:

答案 0 :(得分:2)

我已经使用您提到的用户特定缓存完成了相同的操作。我实际上是在一个单独的命名空间中实现它作为静态get属性。例如:

namespace MyWeb.Session
  public static class CurrentUser {
    public static int DisplayTimeZone {
      get {
        // Check cache first.
        ...

        // Cache miss, load from database and store in cache.
        ...
      }
    }
  }
}

这样每当我需要这个值时,我只需拨打MyWeb.Session.CurrentUser.DisplayTimeZone