Asp.net mvc onactionexecuting与onactionexecuted中相同代码的执行时间
我有一个基本控制器,其方法是Asp.net mvc onactionexecuting与onactionexecuted中相同代码的执行时间,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Asp.net Mvc 5,我有一个基本控制器,其方法是OnActionExecuted,其中包含一些代码 我想移动对方法OnActionExecuting的过滤器检查 更改是否会带来性能问题?否,这只是执行操作的时间:在调用action方法之前或之后,首先(无论性能如何),您应该使用。如果希望在执行操作方法之前执行,请使用OnActionExecuting。如果希望在执行操作后执行,请使用OnActionExecuted 至于性能,它们应该完全相同。控制器提供了两个空的虚拟方法供您在自己的控制器中实现(此处无性能问题):
OnActionExecuted
,其中包含一些代码
我想移动对方法OnActionExecuting
的过滤器检查
更改是否会带来性能问题?否,这只是执行操作的时间:在调用action方法之前或之后,首先(无论性能如何),您应该使用。如果希望在执行操作方法之前执行,请使用
OnActionExecuting
。如果希望在执行操作后执行,请使用OnActionExecuted
至于性能,它们应该完全相同。控制器提供了两个空的虚拟方法供您在自己的控制器中实现(此处无性能问题):
如果查看(请参见下面的代码示例),您可以看到ControllerActionInvoker
在调用操作之前只调用OnActionExecuting(pretoText)
方法,然后在操作完成后调用OnActionExecuted(postContext)
:
内部静态ActionExecuteContext InvokeActionMethodFilter(IActionFilter筛选器、ActionExecutingContext预文本、Func continuation)
{
OnActionExecuting(预文本);
...
尝试
{
postContext=continuation();
}
捕获(线程异常)
{
...
过滤.OnActionExecuted(postContext);
投掷;
}
捕获(例外情况除外)
{
...
过滤.OnActionExecuted(postContext);
如果(!postContext.ExceptionHandled)
{
投掷;
}
}
如果(!wasError)
{
过滤.OnActionExecuted(postContext);
}
返回后上下文;
}
我相信无论如何调用OnActionExecuting
和onactionexecutized
方法,即使调用的是空的(非重写的)方法,性能也不会受到影响
protected virtual void OnActionExecuting(ActionExecutingContext filterContext)
{
}
protected virtual void OnActionExecuted(ActionExecutedContext filterContext)
{
}
internal static ActionExecutedContext InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func<ActionExecutedContext> continuation)
{
filter.OnActionExecuting(preContext);
...
try
{
postContext = continuation();
}
catch (ThreadAbortException)
{
...
filter.OnActionExecuted(postContext);
throw;
}
catch (Exception ex)
{
...
filter.OnActionExecuted(postContext);
if (!postContext.ExceptionHandled)
{
throw;
}
}
if (!wasError)
{
filter.OnActionExecuted(postContext);
}
return postContext;
}