分配和删除会话密钥时会发生什么?
What happens when session keys are assigned and removed?
我使用会话变量通过将对象分配给相应的会话密钥来存储对象。因为这些变量是特定于会话的,所以它们不会被垃圾收集器收集,而是被会话超时清除。为了删除这些会话变量,我必须删除保存我不想再使用的对象的键。
将对象分配给会话变量时,该会话键是指向对象引用本身还是创建另一个引用?
并且当使用 .Remove() 删除保存对象的会话密钥时,此删除是否会清除内存 space 还是它仍然存在但没有相关密钥?
我问这个是因为我想知道在使用多个会话变量(例如会话中的大对象和许多用户)时服务器性能是否会受到影响,以了解是否删除了不需要的对象的键不再使用会在服务器内存使用方面带来好处,并且还可以了解删除这些密钥时会发生什么。
根据我的基本理解 - 当您将变量分配给会话密钥时,它将存储其指针(当它是引用类型时)或将其装箱(当它是值类型时,因为您将一般对象存储在session),从而创建它的副本。
And when a session key that holds an object is removed by using .Remove(), Does this removal clears that memory space or does it still exist under the hood but without a related key?
引用是否被认为是垃圾取决于事实。如果没有指向存储的引用,它将被最近的 GC 删除。
I'm asking this because I want to know if server performance is affected when using several session variables(e.g. big objects in session and many users), to know if removing the keys of the objects that are not going to be used anymore causes a benefit in server memory usage, and also to know what happens under the hood when these keys are removed.
您不应在会话中存储大对象,因为它总是会影响性能。大对象总体上是有问题的(通常会被移动到下一代 GC,这将导致它们的生命周期延长 - 会占用应用程序内存更长时间,可能导致内存碎片导致垃圾收集持续更长时间)。
由于 Session
在内部使用索引器并且其项目存储为 Hashtable
您可以认为 Session
是某种特定于请求的数组。考虑到由于它随每个请求一起传递并且必须存储在某个地方,所以您添加到它的许多对象将持续到例如。用户活跃。如果您有成千上万的用户和商店,例如每个 1MB,想象一下应用程序生命周期将分配多少内存。
我使用会话变量通过将对象分配给相应的会话密钥来存储对象。因为这些变量是特定于会话的,所以它们不会被垃圾收集器收集,而是被会话超时清除。为了删除这些会话变量,我必须删除保存我不想再使用的对象的键。
将对象分配给会话变量时,该会话键是指向对象引用本身还是创建另一个引用?
并且当使用 .Remove() 删除保存对象的会话密钥时,此删除是否会清除内存 space 还是它仍然存在但没有相关密钥?
我问这个是因为我想知道在使用多个会话变量(例如会话中的大对象和许多用户)时服务器性能是否会受到影响,以了解是否删除了不需要的对象的键不再使用会在服务器内存使用方面带来好处,并且还可以了解删除这些密钥时会发生什么。
根据我的基本理解 - 当您将变量分配给会话密钥时,它将存储其指针(当它是引用类型时)或将其装箱(当它是值类型时,因为您将一般对象存储在session),从而创建它的副本。
And when a session key that holds an object is removed by using .Remove(), Does this removal clears that memory space or does it still exist under the hood but without a related key?
引用是否被认为是垃圾取决于事实。如果没有指向存储的引用,它将被最近的 GC 删除。
I'm asking this because I want to know if server performance is affected when using several session variables(e.g. big objects in session and many users), to know if removing the keys of the objects that are not going to be used anymore causes a benefit in server memory usage, and also to know what happens under the hood when these keys are removed.
您不应在会话中存储大对象,因为它总是会影响性能。大对象总体上是有问题的(通常会被移动到下一代 GC,这将导致它们的生命周期延长 - 会占用应用程序内存更长时间,可能导致内存碎片导致垃圾收集持续更长时间)。
由于 Session
在内部使用索引器并且其项目存储为 Hashtable
您可以认为 Session
是某种特定于请求的数组。考虑到由于它随每个请求一起传递并且必须存储在某个地方,所以您添加到它的许多对象将持续到例如。用户活跃。如果您有成千上万的用户和商店,例如每个 1MB,想象一下应用程序生命周期将分配多少内存。