Как найти, где используется время при использовании ServiceFabric и HttpClient

#c# #azure #azure-service-fabric #dotnet-httpclient

#c# #azure #azure-service-fabric #dotnet-httpclient

Вопрос:

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

Сервер отправляет на ServerB, используя следующую функцию:

 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;    
        }
    }
}
  

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

 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>();
}
  

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

продолжительность событий

Ответ №1:

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