我被要求为 ASP .NET / MVC C# 3.5 Web 应用程序提出状态管理策略
我选择在状态服务器上存储会话——这将是一个单独的物理盒子。我担心存储到会话中时序列化/反序列化对象所花费的时间......
有谁知道这样做时获得最佳性能的技术?
还可以在将信息存储在会话帮助中之前压缩信息,或者这也会导致性能时间变慢。
编辑:我为状态服务器使用一个单独的框,因为我们将有多个 Web 服务器。
我被要求为 ASP .NET / MVC C# 3.5 Web 应用程序提出状态管理策略
我选择在状态服务器上存储会话——这将是一个单独的物理盒子。我担心存储到会话中时序列化/反序列化对象所花费的时间......
有谁知道这样做时获得最佳性能的技术?
还可以在将信息存储在会话帮助中之前压缩信息,或者这也会导致性能时间变慢。
编辑:我为状态服务器使用一个单独的框,因为我们将有多个 Web 服务器。
就个人而言,这里最常见的元素是减少投入会话的信息量。
压缩可能会节省空间,但完成它需要更多的 CPU 时间,很可能会导致性能下降或至少没有净收益。除非你在谈论非常大的物体。
会话、应用程序和缓存的 Zip 压缩示例,在 StackOverflow 上使用。
确保在不使用会话状态的页面上禁用它。“默认情况下,ASP.NET 会话状态管理器在每个请求中对会话数据存储执行两次访问——一次读取访问和一次写入访问,无论请求的页面是否使用会话状态。” ——MSDN 杂志
请注意,您不要试图过早地优化您的解决方案。在实现诸如会话压缩之类的东西之前,进行一系列基准测试以确定您的应用程序中是否需要类似的东西可能是一个好主意。
您确定要在会话存储中存储这么多数据吗?单个用户会话的典型使用是几百字节!
至于序列化和反序列化,那么小的尺寸可以忽略不计。
当然,您会期待更多的用户,但仍然如此。
如果您在会话中存储大量数据,那么 IMO,您做错了。
一些人指出每个用户的会话状态中的数据过多是问题的征兆,但他们并没有直接指出解决方案:保留一个用户 SQL 数据库并将所有用户信息存储在其中。然后会话状态通常只包含登录用户的 ID。任何其他状态都可能与用户的当前活动直接相关,这表明它可能更适合作为内存中的 cookie 或查询字符串变量进行携带。无论如何,这通常是更好的选择,这样当用户单击后退和前进按钮时,事情就会进入损坏状态。