首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基准测试ASP.net Web操作

基准测试ASP.net Web操作
EN

Stack Overflow用户
提问于 2015-05-02 04:49:37
回答 2查看 1.9K关注 0票数 2

我正在从事一个ASP.net Web 2项目,并希望对每个控制器操作的时间进行基准测试。我的想法是使用ActionFilterAttribute,并在包含所需时间的响应中添加一个http头。

主计长:

代码语言:javascript
复制
[Timing]
public class MyController : ApiController
{
    [Route("get")]
    public IHttpActionResult Get() {
        System.Threading.Thread.Sleep(1000);
        return Ok();
    }
}

ActionFilterAttribute:

代码语言:javascript
复制
public class TimingAttribute : ActionFilterAttribute
{
    private System.Diagnostics.Stopwatch timer;
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        timer = System.Diagnostics.Stopwatch.StartNew();
    }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        timer.Stop();
        if (actionExecutedContext.Response != null && actionExecutedContext.Response.Content !=null)
        {
                actionExecutedContext.Response.Content.Headers.TryAddWithoutValidation("Execution-time", timer.ElapsedMilliseconds.ToString());
        }
    }
}

当我运行这个程序时,即使控制器延迟了1s,执行时间也不到1秒。有没有人知道为什么会这样,或者是否有更好的方法对Web 2进行基准测试?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-02 07:30:07

在OnActionExecuting被击中之前,在流水线上执行了很多事情。此外,还有其他在OnActionExecuted之后执行的事情,其中最明显的是HttpActionResult。因此,最好是用HttpApplication.BeginRequest事件开始测量时间,用HttpApplication.EndRequest结束测量时间。

但是,我认为有更好的方法来测试web应用程序,而不是在服务器端记录经过的时间。费德勒有许多与基准测试相关的优秀特性:

  • 您可以使用筛选器捕获感兴趣的http流量。
  • 统计信息视图,您可以在其中看到所选会话的大量统计信息。
  • 时间线视图,它显示了一个很好的图表,关于所选会话所花费的时间。
  • 您可以将会话保存到会话存档中,这是一个压缩文件,包含有关会话的所有信息,包括带有时间信息的xml文件,您可以对这些文件进行分析,以构建自己的报告。
票数 0
EN

Stack Overflow用户

发布于 2020-02-06 14:06:56

我遇到了同样的问题,发现这个博客上的解决方案起了作用:

代码语言:javascript
复制
public class StopwatchAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            base.OnActionExecuting(actionContext);
            actionContext.Request.Properties[actionContext.ActionDescriptor.ActionName] = Stopwatch.StartNew();
        }

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            base.OnActionExecuted(actionExecutedContext);
            Stopwatch stopwatch = (Stopwatch)actionExecutedContext.Request.Properties[actionExecutedContext.ActionContext.ActionDescriptor.ActionName];

            if (actionExecutedContext.Response != null && actionExecutedContext.Response.Content != null)
            {
                actionExecutedContext.Response.Content.Headers.TryAddWithoutValidation("Execution-Time", stopwatch.ElapsedMilliseconds.ToString());
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29998518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档