Как узнать, где используется время при использовании ServiceFabric и HttpClient - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь выяснить, где время используется в моем приложении.

Сервер A отправляет на сервер B с помощью следующей функции:

protected async Task<T> SendRequest<T>(HttpRequestMessage request)
{
    using (var telemetryRequest = _telemetry.ExternalRequest("Outgoing call -> ", request.RequestUri.OriginalString, "", false))        // Creates a DependencyTelemetry
    {
        using (var response = await Client.SendAsync(request))
        {
            var data = await response.Content.ReadAsStringAsync();
            var returnObject = JsonConvert.DeserializeObject<T>(data, new JsonSerializerSettings
                {
                    Error = HandleDeserializationError
                });

            return returnObject;    
        }
    }
}

Затем на сервере B принимается вызов с использованием специального промежуточного программного обеспечения:

public class MyCustomkMiddleware
{
    public async Task InvokeAsync(HttpContext context)
    {
        using (var request = _telemetryClient.InCommingRequest($"Incoming request: {context.Request.Method})            // Creates a RequestTelemetry
        {
            await _next.Invoke(context).ConfigureAwait(false);
        }
    }
}

Промежуточное программное обеспечение настроенопри запуске:

public void Configure(IApplicationBuilder app, ContextInitializer contextInitializer, )
{
    app.UseMiddleware<MyCustomkMiddleware>();
}

Если вы посмотрите журнал, вы увидите, что вызов занимает много времени, но я не совсем понимаю, почему.Я предполагаю, что из-за чего-то глупого мы делаем большое время запуска и завершения работы.Как я могу сузить это или найти проблему?

duration of events

1 Ответ

0 голосов
/ 05 апреля 2019

Я так и не понял, как это отладить, но замедление было вызвано сервисами. AddScoped. Меняя его на services.AddSingleton () значительно улучшил производительность!

...