C# 使用DynamoDB访问时,会话状态是否读取/写入所有内容
我有一个C#.NET应用程序,它的会话状态由支持。然而,我注意到我期望的更高的吞吐量。然而,我注意到在实际的表中,所有内容都存储为一个长字符串中的SessionItems 但假设我在会话中存储了多个内容C# 使用DynamoDB访问时,会话状态是否读取/写入所有内容,c#,session,amazon-web-services,amazon-dynamodb,C#,Session,Amazon Web Services,Amazon Dynamodb,我有一个C#.NET应用程序,它的会话状态由支持。然而,我注意到我期望的更高的吞吐量。然而,我注意到在实际的表中,所有内容都存储为一个长字符串中的SessionItems 但假设我在会话中存储了多个内容 Http.Context.Session["Object1"] = obj1; Http.Context.Session["Object2"] = obj2; 其中obj1和obj2是两个不同类的实例 现在,当我读或写其中一个时,例如: var obj1 = Http.Context.Sess
Http.Context.Session["Object1"] = obj1;
Http.Context.Session["Object2"] = obj2;
其中obj1
和obj2
是两个不同类的实例
现在,当我读或写其中一个时,例如:
var obj1 = Http.Context.Session["Object1"];
它正在读取DynamoDB表上存储在SessionItems中的所有内容吗?这是一种解释,可以解释表上更高的吞吐量,但似乎非常不必要。理想情况下,ASP.NET会在每次请求(例如页面/控制器)时对存储在用户会话中的对象的序列化集合执行一次读写操作。如果您根据请求访问该集合中的多个项,则它将使用本地副本,而不必访问基础数据存储 然而,我认为您注意到的是ASP.NET的。当它尝试执行单次读取以检索用户的会话数据时,如果该用户的会话数据上已经设置了锁,它将继续重试检索(每500毫秒一次) ASP.NET HTTP生命周期的细节取决于框架版本等,但一般概念如下:
session
,则它们会连续执行。(即使他们没有明确访问会话
)
避免这种情况的一种方法是有意确定写入会话的位置,并在所有其他页面/控制器上指定会话状态行为。只读。执行此操作时,ASP.NET不会设置独占锁(将使用GetItem而不是GetItemEx)。看
第页:
参考:
- -显示Microsoft会话提供程序的示例
- -AWS会话提供程序的源
- -较旧,但演示了请求流的概念
- -有关创建会话提供程序的详细信息
希望这有帮助
问候,
罗斯
<% @Page EnableSessionState="ReadOnly" %>
[SessionState(SessionStateBehavior.ReadOnly)]