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;
}