【发布时间】:2019-07-06 05:11:08
【问题描述】:
我正在使用HttpContext.Current.Items 根据登录用户设置租户。为此,我使用以下代码:
protected virtual void Application_BeginRequest()
{
HttpContext.Current.Items["_CurrentTenant"] = Tenant.GetCurrent();
}
protected virtual void Application_EndRequest()
{
var currentTenant = HttpContext.Current.Items["_CurrentTenant"] as Tenant;
if (currentTenant != null)
currentTenant.Dispose();
}
由于HttpContext.Current.Items 只存在于当前请求中,我希望它在请求完成后被销毁。此外,CurrentTenant 对象是一个完全托管的对象。
因此,是否需要在EndRequest 中进行处置?如果不这样做会怎样?
【问题讨论】:
-
为什么不试试呢?注释掉你要处理它的行并尝试一下
-
我当然试过,但没有明显效果。例如,我想知道省略它是否会导致内存泄漏。另外,如果 Tenant 对象无论如何都不是一次性的,这是否有意义。
-
最后一句“另外,如果租户对象不是一次性的,这是否有意义”是 IDisposable 类型的租户对象吗?
-
容器可能会被销毁,但如果您提取对某个项目的引用并将其存储在其他位置,只要您保留对它的引用,该项目就会一直存在。
-
经验法则:如果一个对象从 IDisposable 继承,当它超出范围时总是将其丢弃。如果没有,让 GC 处理它