ori*_*rip 15 asp.net session session-state
我正在使用ASP.NET的进程内会话状态存储.它专门锁定对会话的访问,这意味着顺序地向同一会话发送并发请求.
我想删除这个隐式的独占锁,因此可以同时处理每个会话的多个请求.当然,我将在适用的情况下自己同步对会话状态的访问.
我正在使用会话状态提供程序的MSDN文档来编写我自己的会话状态提供程序,这个SO问题向我指出了将此实现为HTTP模块的示例代码,但代码看起来很复杂,只是为了删除锁.
我应该最终使用ASP.NET的缓存来实现会话状态,并停止使用内置会话,就像Vivek在本文中所描述的那样,但是现在我想如何删除锁定.
任何想法或示例实现?
Joe*_*Joe 12
不是你想要的答案,但我认为即使有可能,改变SessionState以这种方式工作的方式也是一个糟糕的主意.
想想那些必须维护你的代码的穷人.Session以这种方式序列化请求的事实意味着ASP.NET开发人员通常不需要过多担心线程安全.
此外,如果有人添加了碰巧使用Session的第三方组件,它会期望关于锁的常规保证 - 而且你会突然开始获得Heisenbugs.
相反,衡量性能并确定需要同时处理请求的特定区域 - 我敢打赌它们很少 - 并且只针对涉及的特定项目仔细实施自己的锁定机制 - 可能是您计划最终使用的解决方案ASP.NET缓存.
如果您只是从给定页面上的会话中读取,则可以使用该Page指令:
<%@ Page EnableSessionState="ReadOnly" %>
Run Code Online (Sandbox Code Playgroud)
指示只读性质并删除独占写锁定,这将允许来自同一会话的对此页面的并发请求.
在内部使用ReaderWriter锁时,读取器锁将阻止写入器锁,但读取器锁将不会阻止读取器锁定.Writer锁将阻止所有读写器锁定.
如果您需要同时从同一页面读取和写入会话,我认为您已经找到的信息已经足够了.关于用缓存替换会话的一句话:虽然会话是可靠的,但缓存并不意味着如果你把东西放进缓存中就不能保证将其恢复.ASP.NET可能决定在内存压力较低的情况下驱逐缓存,因此在访问之前,您始终需要检查缓存中是否存在某个项目.
| 归档时间: |
|
| 查看次数: |
7685 次 |
| 最近记录: |