使用Session来防止往返请求

时间:2010-11-18 19:28:18

标签: asp.net caching session

我在usercontrol中有一个位于aspx页面的Telerik菜单,我需要根据登录用户生成菜单。

所以我需要将数据源绑定到菜单。 我的网站每天将有超过1000个用户。 为防止往返请求,我从会话中生成菜单 我为此目的使用InProc会话,并将Sql数据保存在会话中。

菜单的会话对象大小约为40个字节。所以(1000个用户)*(40个字节)=大约40K服务器的内存。 我没有任何其他服务器用于使用StateServer Session。 而且我也会将会话用于其他目的。

是否有更好的解决方案,因为性能对我的场景起着关键作用。 或者我已经选择了最佳解决方案?

2 个答案:

答案 0 :(得分:1)

看起来已经是一个非常好的解决方案,假设会话超时不是问题。

答案 1 :(得分:1)

这听起来不像你这样做会有任何问题,但你可能对my answer to this question感兴趣。

一般来说,会话​​是缓存数据的好地方:

  1. 相对较小,
  2. 获取费用很高,
  3. 不需要在给定用户的会话之外使用
  4. 听起来你至少符合上面的前两个要求。

    我工作的一个项目有一个类似于你所描述的项目,但很多用户最终会得到完全相同的菜单,而菜单本身的生成也很昂贵,所以我将问题分成几部分,像这样:

    • 用户的PersonId存储在会话中。
    • MenuKeyRepository将获取需要为给定人员ID显示的菜单项键的ID列表,并将此列表作为“MenuKey”返回。
    • MenuRepository会根据给定的MenuKey生成实际菜单。

    这两个存储库使用滑动内存缓存,因此在大多数情况下,菜单键和菜单本身都已构建。如果新用户登录,但应该看到与其他最近用户相同的菜单项,则第一个存储库需要构建其菜单键,但实际菜单已经缓存。

    我不知道这种方法对你来说是否有意义,但它确实是值得的。