【问题标题】:How can I trace and log performance and call on my Web API requests?如何跟踪和记录性能并调用我的 Web API 请求?
【发布时间】:2016-06-27 07:13:18
【问题描述】:

我刚刚继承了 C# 中非常糟糕的 Web API 代码。我需要改进它,但我不知道从哪里开始。有很多类,代码是一场噩梦。我也认为部分代码从未使用过。

我想计算每个请求被调用的次数以及每个请求的持续时间。我想将我的所有结果记录在一个表中。在一两天内,我可以清楚地了解我最常用的东西和需要时间的东西。客户对此抱怨。

我使用 Nlog 记录日志和一个简单的秒表来计算性能。你有什么建议?我知道最好使用过滤器和属性进行跟踪,但我怎样才能像这样记录和跟踪性能?

// GET api/Item/5
public Item GetItem(string id)
{
    // I don't use string.Format in my real code. This is just for this example.
    logger.Trace(string.Format("Request: GET api/Item/{0}", id));
    Stopwatch sw = new Stopwatch();
    sw.Start();

    Item item = context.Items.Single(i => i.Code == id);

    sw.Stop();
    logger.Trace(string.Format("Response: GET api/values/{0}\r\nElpased={1}\r\rn{2}", id, sw.Elapsed, response));

我在这里找到了以前的信息

感谢

http://weblogs.asp.net/fredriknormen/log-message-request-and-response-in-asp-net-webapi

Exact time measurement for performance testing

当然,所有这些跟踪和性能作业都将从我的配置文件中激活或停用。对于 NLog,它是内置的。对于秒表,我计划构建一些东西。我不打算在生产中一直保持这个状态

【问题讨论】:

  • Resharper 在这里帮不上忙。 Resharper 无法在运行时检测到未使用的请求。
  • 属性基础记录检查这个stackoverflow.com/questions/13655541/…
  • 好的,请阅读我的问题 Offir Pe'er。这是关于编写代码,而不是使用工具。
  • 由于控制器是根据请求创建的,您可以创建一个主控制器,它在其构造函数中启动日志记录并在解构函数中完成它。然后你不必在每个方法中添加登录代码,仍然可以查看大修性能。
  • @Prathyush 这是我迷路的地方。我阅读的每篇文章都提出了不同的方法。使用 ActionFilter,现在使用 IOperationInvoker,使用 DelegatingHandler,... 说真的,我仍然更喜欢在每个方法的开头和结尾手动编写日志。

标签: c# asp.net-web-api nlog


【解决方案1】:

您可以使用DelegatingHandler

HTTP 处理程序的基本类型,它将 HTTP 响应消息的处理委托给另一个处理程序,称为内部处理程序。

在管道中注入允许在控制器中处理请求之前和之后捕获位置。

public class MonitoringDelegate : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
    var watcher = Stopwatch.StartNew();
    var response = await base.SendAsync(request, cancellationToken);
    watcher.Stop();

    //log/store duration using watcher.ElapsedMilliseconds

    return response;
    }
}

【讨论】:

    【解决方案2】:

    这是记录性能和操作的更好方法:http://arcware.net/logging-web-api-requests/

    请求时间和响应时间的时间差就是经过的时间。

    【讨论】:

      【解决方案3】:

      看看探查器。这种更通用的方法。我们使用Ants performance profiler

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        • 2020-02-10
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        相关资源
        最近更新 更多