ASP.NET 控制器何时被销毁? [复制]

Posted

技术标签:

【中文标题】ASP.NET 控制器何时被销毁? [复制]【英文标题】:When does an ASP.NET controller get destroyed? [duplicate] 【发布时间】:2015-08-04 04:49:44 【问题描述】:

根据this answer,ASP.NET MVC 创建一个新的控制器类实例来响应每个请求。

我的问题是,控制器实例何时被销毁?

到目前为止,我一直假设(可能是错误的)这些实例在每次响应结束时被销毁,但是我遇到的一些数据库池问题让我认为它们可能留给了垃圾收集器。有人对此有任何见解吗?

【问题讨论】:

另见***.com/questions/2355139/… 这就是为什么你应该创建你的资源而不是你的行动(当然清理它们 - 最有可能通过使用 using;)) 【参考方案1】:

控制器由垃圾收集器清理。 但是,如果您要在清理旧控制器之前发出新请求,它不会影响您的新请求,因为将为该新请求创建具有新上下文的新控制器。

如果您遇到数据库问题,可能来自您在后端处理读取/写入数据库的方式。如果在 B 发生更改之前实例化 A,则数据库上下文“A”不知道另一个数据库上下文“B”中发生的更改。不确定这是否是您遇到的问题。

【讨论】:

谢谢萨米。有没有办法在页面生命周期结束时(在控制器方法执行之后)执行一些代码,而不将逻辑放入每个方法中?我需要确保所有资源都被释放,尤其是任何数据库连接。 @MarkyMark 当涉及您的连接的代码执行超出范围时,您的数据库连接应该自动释放。此链接可能会有所帮助(我假设您使用的是实体框架)Connection Management 我相信我已经找到了我自己的问题的答案,那就是重写 OnResultExecuted() 方法。这允许我在控制器方法执行完成后执行一些代码,而无需等待垃圾收集器释放资源。

以上是关于ASP.NET 控制器何时被销毁? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WEB API 的 ASP.NET MVC 控制器级别中启用 CORS? [复制]

ASP.NET Web Api 中的 Swashbuckle 被嵌套控制器混淆

为啥 Asp.Net Core Kestrel 服务器向 Ngrok 返回 404 并且控制器永远不会被调用?

如何返回 404 状态,其中无效参数被传递到我的 ASP.NET MVC 控制器?

asp.net web api 方法没有被执行

ASP.NET中MVC的理解