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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

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