#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() значительно улучшило производительность!