【问题标题】:Will nulling an object in session destroy it right away将会话中的对象清空会立即将其销毁
【发布时间】:2021-08-14 17:27:20
【问题描述】:

我有一个大对象,我想将其存储在session 中,可能需要一分钟才能使用,然后将其从内存中删除。一个对象会在Gen0Gen1 中停留多长时间,然后才会停留在 Gen2 中直到 GC?如果我在一分钟后NULL 它会立即清除内存,还是至少在 Gen0 或 Gen1 中清除内存?我想尽快释放该内存,以免它进入 Gen2。

Session["Object"] = null;

【问题讨论】:

  • [理论] 创建一个带有析构函数~ 的对象,在析构函数中放置一个断点,然后在你的调试器下运行。应该告诉你它什么时候被销毁。
  • 您的会话对象只会在会话超时时被垃圾回收。

标签: c# asp.net .net session garbage-collection


【解决方案1】:

看起来它不是确定性的,因为它已经过优化。

https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals

但你可以通过以下方式强制它:

How to force garbage collector to run?

System.GC.Collect();

【讨论】:

  • System.GC.Collect(); 并不意味着它会立即运行。
  • @SᴇM 你能详细说明一下吗,我只发现数据不一定会清理所有内容。
  • Collect() 将向 CLR 发送消息以开始收集,但这并不意味着它将在该行之后立即开始。
  • 我不确定将 null 设置为会话对象并强制 GC.Collect 是否会释放它,因为它可能仍会在其他地方被引用。
  • 你说的开始收集是指Gen0还是Gen2?是只表示会话对象还是所有对象?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 2011-02-25
相关资源
最近更新 更多