使用会话:我在滥用它吗?

时间:2011-01-30 20:35:13

标签: asp.net

假设我有一个网站,其中报告页面将包含特定于用户的每日报告。

默认情况下,用户登录今天的报告,但如果他点击日历控件并选择新日期,则会在当天加载新报告。我想要做的是使用会话作为报告的缓存。他第一次加载一天的报告时,会从数据库加载到会话中,然后从会话加载到页面。每次他为日期加载新报告时,逻辑首先检查该特定报告是否在会话中,并且仅当它不是从DB加载时才检查。报告大约有15列,每天约300-500行。将存储在会话中的是对象列表的字典,其中日期为键,列表为值。我正在使用InProc会话。我也在考虑存储其他几个字典以及其他对象列表。

这是充分利用.net框架的有效方法吗?如果它实际上没有提高调用数据源的性能,它会慢吗?我正在寻找能够扩展到大约500-1000个并发用户的东西。

感谢。

2 个答案:

答案 0 :(得分:2)

这听起来像是你对我的预优化。您是否运行过任何性能测试来验证您是否可以将它放入Session(或Cache)中获得任何好处?

您的用户是否对性能表示担忧?

对我来说,在我知道存在性能问题之前,我不会考虑优化任何类型的缓存,然后我会考虑为什么我遇到性能问题,并优化

答案 1 :(得分:0)

缓存和会话状态之间存在显着差异:

  • 缓存基于服务器,但会话基于用户(可以跨多个服务器)
  • 缓存通常是基于网址的,所以如果所有用户的网址相同,则无法通过缓存实现。
  • 当服务器接近内存不足时,缓存将被回收并回收内存(因此使用缓存将不会获得OutOfMemory异常)但会话只会增长并且您将得到一个OutOfMemory如果您正在使用进程内会话而不是。
  • 会话通常用于必须存储的用户级别状态,但缓存用于提升性能。

综上所述,并考虑到您的要求,除非所有用户的网址相同,否则最好使用缓存。如果您使用会话状态,则需要非常小心只是一点点性能可以杀死你的网站