【问题标题】:How can I implement a .NET Core performance profiler via code如何通过代码实现 .NET Core 性能分析器
【发布时间】:2018-06-11 13:19:56
【问题描述】:

我开发了一个中间件,它在调用下一个之前启动一个秒表,并在响应可用时停止,然后我记录之后经过的时间。

这一切都很好。但它并没有为我提供细分,即:在调用中哪个方法调用花费了多少?例如:如果我在一个请求中有 4 个方法调用,我想知道每个方法的持续时间。

我认为,中间件不足以实现此目的,无需在各处放置装饰器,我该如何完成?

谢谢。

【问题讨论】:

  • 不碰被叫代码?在不影响性能(或大大降低准确性)的情况下,很难做到(AFAIK)。或多或少不是普通的 Profiler 所做的吗?您可以经常对堆栈跟踪进行采样,但优化会给您带来几乎无用或难以阅读的结果(并且由于准确性非常差,性能会受到很大影响)

标签: .net asp.net-mvc performance asp.net-core


【解决方案1】:

您可能必须手动检测最有趣的代码片段。

虽然有 IL 注入的解决方案(请参阅 PostSharp 网站上的 MSIL Injection 页面),但我不认为可以在不更改现有代码库的情况下在任意位置注入代码。然而,在许多情况下,使用装饰器来检测现有代码的大部分(假设它被合理地很好地分成模块)是相对容易的。例如将自定义分析DelegatingHandler 添加到HttpClient 或使用分析SqlConnection 工厂。

为了检查调用层次和延迟,您可以使用MiniProfiler,它是内置的装饰器和RenderPlainText() 方法。或者您可以利用Metrics.NET 库来检查与吞吐量相关的指标,例如直方图和计数器。

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多