C# 进程外会话状态内存管理

C# 进程外会话状态内存管理,c#,asp.net,.net,session,asp.net-session,C#,Asp.net,.net,Session,Asp.net Session,我们正在使用进程外会话状态服务/ASP.Net会话状态。我们知道我们在这方面遇到了问题,因为它在过去被滥用,太多存储在会话状态中太频繁,所以我们正在转向一个更具可伸缩性的系统 不过,与此同时,我们正试图弄清楚会话状态服务是如何管理其内存的,以及我们有哪些限制。不过,微软似乎没有透露任何细节 我特别想知道: “标准”进程外会话状态服务(与IIS一起安装在windows管理控制台中)可以存储的容量有哪些限制? (x64) 是否有每个用户的限制 所谓标准服务,我指的是: 托管服务的计算机没有超出此

我们正在使用进程外会话状态服务/ASP.Net会话状态。我们知道我们在这方面遇到了问题,因为它在过去被滥用,太多存储在会话状态中太频繁,所以我们正在转向一个更具可伸缩性的系统

不过,与此同时,我们正试图弄清楚会话状态服务是如何管理其内存的,以及我们有哪些限制。不过,微软似乎没有透露任何细节

我特别想知道:

  • “标准”进程外会话状态服务(与IIS一起安装在windows管理控制台中)可以存储的容量有哪些限制? (x64)
  • 是否有每个用户的限制
所谓标准服务,我指的是:


托管服务的计算机没有超出此限制的限制。如果它有16 GB的RAM,假设其他进程/操作系统/等使用了一些GIG,那么会话数据将有大约13 GB的可用内存。数据不会持久化到磁盘,因此数据只存在于RAM/内存中;这就是重新启动服务时所有会话都消失的原因。内存是易失性的,其工作原理类似于RAM磁盘

如果您达到会话状态服务所在计算机的内存限制,则可能是每个用户存储的数据太多,或者是太多用户存储的数据太少。您已经走上了正确的轨道,因为下一步将移动到分布式会话状态提供程序以正确扩展。这通常通过会话状态提供程序附带的分布式缓存系统来实现,或者通过针对所述系统编写自己的提供程序来实现


对数据没有每个用户的限制,但请注意,进程外通信总是通过序列化进行的。因此,每个请求序列化/反序列化一gig的用户数据有一个实际的限制,无论你如何处理,都会非常慢。

我已经看到了可能的重复,但这个问题不是很具体,不清楚他说的是inproc还是outpfproc还是x32/x64。我不明白那个问题怎么会得到5票。其次,这个答案根本不能回答这个问题。正如我所读到的,
使用会话状态服务器(mode=“StateServer”)的进程外状态管理仅限于状态服务可用的内存量。
这将回答您的第一个问题,并隐式地为
受限于状态服务可用内存量的用户回答第二个问题。
。因此,这只是32位计算机(2gb)或64位安装的内存的限制,根据操作系统的不同,64位大约为128gb到16tb。@Liam第一个问题的答案是否取决于StateServer有多少可用内存?我认为它通常被称为StateServer,而不是进程外或“状态服务”