2

我有一个很少发生但无论如何都可能被抓住的问题。问题是有时当我调用某些控制器的操作时会出现巨大的时间延迟。我记录了时间,结果看起来很奇怪:

> -->BeginRequest: /Data/MyController Now: 17:47:37:248 Thread id = 22
> ---->Prerequest: /Data/MyController Now: 17:47:37:249 Thread id = 22
> ------>Init DataController: /Data/MyController Now: 17:47:37:250 Thread id = 22
> ------>/Data/MyController executing:  Now: 17:47:46:302 Thread id = 22
> == /Data/MyController inside: now is 17:47:46:304

BeginRequest 和 Prerequest 是记录到 Global.asax 中的事件,Init 来自控制器。初始化覆盖方法,执行 - 来自控制器中的 OnActionExecuting。

如您所见,控制器的初始化和执行之间几乎有 10 秒的时间。我不明白这段时间发生了什么。我应该检查哪些事件?

4

1 回答 1

3

在 Initialize 方法和进入控制器操作之间可能会发生很多事情。您可以查看以下提供深入概述的文章。你可以在这里下载海报

基本上在初始化控制器之后发生的步骤是:

  1. 授权过滤器 OnAuthorization 方法被调用
  2. 模型绑定器反序列化参数
  3. 动作过滤器 OnActionExecuting 方法被调用

文章中显示的图表中存在轻微错误,其中步骤 1 和 2 颠倒了。事实上,授权过滤器在模型绑定之前执行。

因此,您应该在代码中寻找自定义授权过滤器、自定义模型绑定器和自定义操作过滤器。所有这些都可能导致您在控制器的初始化逻辑和进入控制器操作之间观察到的减速。

于 2012-04-18T06:19:54.490 回答