C# 让TraceTelemetry显示在Application Insights时间表中

C# 让TraceTelemetry显示在Application Insights时间表中,c#,asp.net-web-api,azure-application-insights,C#,Asp.net Web Api,Azure Application Insights,我有一个小的评测类,它实现了IDisposable,它在构造函数中启动秒表,并在Dispose()中停止秒表,并使用TelemetryClient.TrackTrace将运行时间(毫秒)记录到Azure。它工作正常,但我希望它出现在Azure Portal的应用程序洞察页面的时间线上。如果我使用TelemetryClient.TrackDependency,我可以看到它,但因为它不是依赖项,所以我不想使用它。有没有办法让它出现在时间线上?我试图将经过的时间添加为一个名为duration的属性,但

我有一个小的评测类,它实现了
IDisposable
,它在构造函数中启动秒表,并在
Dispose()
中停止秒表,并使用
TelemetryClient.TrackTrace
将运行时间(毫秒)记录到Azure。它工作正常,但我希望它出现在Azure Portal的应用程序洞察页面的时间线上。如果我使用
TelemetryClient.TrackDependency
,我可以看到它,但因为它不是依赖项,所以我不想使用它。有没有办法让它出现在时间线上?我试图将经过的时间添加为一个名为
duration
的属性,但没有成功

我不知道这是否有帮助,但一个简化版的探查器应该是这样的:

public class Profiler : IDisposable
{
    private readonly Stopwatch _stopwatch;
    private readonly ILogger _logger;
    private readonly string _name;
    private readonly DateTimeOffset _timestamp;

    public Profiler(string name)
    {
        _logger = LogFactory.GetLogger();

        _stopwatch = Stopwatch.StartNew();
        _timestamp = DateTimeOffset.UtcNow;
        _name = name;
    }

    public static Profiler Step(string name)
    {
        return new Profiler(name);
    }

    public void Dispose()
    {
        var telemetryClient = new TelemetryClient();

        _stopwatch.Stop();

        var message = $"Step - {_name} {_stopwatch.ElapsedMilliseconds} ms";

        var traceTelemetry = new TraceTelemetry(message, SeverityLevel.Verbose)
        {
            Timestamp = _timestamp
        };

        traceTelemetry.Properties.Add("Elapsed Milliseconds", $"{_stopwatch.ElapsedMilliseconds}");

        telemetryClient.TrackTrace(traceTelemetry);
    }
}

时间线视图主要将包含时间戳和持续时间的事件类型显示为基本属性(但不是自定义属性),例如请求、依赖项(随时间显示)或带有时间戳的关键事件,例如异常(显示为时间点)

跟踪和事件在此视图中显示为平面有序列表,而不是时间线(如果切换到平面列表视图)

考虑到当前的实现(除非更改),您建议使用依赖项是在您的案例中实现时间线视图的最简单方法之一


您可以在这里稍微使用一些定义—使用请求类型进行总体操作,使用依赖关系进行方法,在失败时使用异常。这应该很好地符合模型,并提供了一个良好的时间轴表示。

我们查看了当前使用ILSpy的实现,并注意到您在这里所说的,请求和依赖项有自己的属性,其持续时间为1。我不想使用依赖关系,但是是的,那会起作用。因此,在他们改变SDK和Azure门户上的实际实现之前,这将是正确的答案。