Сбор мусора не работает в службе приложений AzureC#

Место общения программистов C#
Ответить
Anonymous
 Сбор мусора не работает в службе приложений Azure

Сообщение Anonymous »

Я создал службу приложений, имеющую только один контроллер EventGridL3App. В конечной точке «/EventGridL3App» я создаю клиент Cosmos и использую его для записи в базу данных CosmosDb. Он запускается через подписку на сетку событий (вебхук). Прикрепил код этого контроллера.
Вижу, что процент памяти достиг 90% и следовательно сервис приложения не работает. Событие после завершения выполнения не снижает использование памяти.
Процент памяти
  • .csproj файл
  • Код контроллера
    Конструктор контроллера
    Dispose функция
  • program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();

// Add configuration
builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

var app = builder.Build();

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();


Даже после обновления шаблона Singleton для клиента Cosmos использование памяти продолжает увеличиваться.
Внесены изменения в следующие файлы
  • Program.cs
namespace EventGridL3AppService
{
using Azure.Identity;
using Microsoft.Azure.Cosmos;
using EventGridL3AppService.Constants;

///
/// Program class.
///
public static class Program
{
///
/// Main method to execute.
///
/// Command line arguments.
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);

// Register CosmosClient as a singleton
builder.Services.AddSingleton(serviceProvider =>
{
string endpointUri = "https://syntheticsl3testscosmosdb.docum ... e.com:443/";
var credential = new DefaultAzureCredential();
return new CosmosClient(endpointUri, credential);
});

// Register the container as a singleton
builder.Services.AddSingleton(serviceProvider =>
{
var cosmosClient = serviceProvider.GetRequiredService();
return cosmosClient.GetContainer(EventGridL3Constants.EventGridCosmosDBId, EventGridL3Constants.EventGridCosmosContainerId);
});
builder.Services.AddControllers();

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();
}
}
}

  • Код контроллера
namespace EventGridL3AppService.Controllers
{
using EventGridL3AppService.Constants;
using EventGridL3AppService.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.EventGrid.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

[ApiController]
[Route("[controller]")]
public class EventGridL3AppController : ControllerBase
{
private readonly ILogger logger;
private CosmosClient cosmosClient;
private Container container;

public EventGridL3AppController(ILogger logger, CosmosClient cosmosClient, Container container)
{
this.logger = logger;
this.cosmosClient = cosmosClient;
this.container = container;
}

[HttpPost]
public async Task Post()
{
// Read the request body
this.logger.LogInformation("Webhook trigger recieved, app service starting processing the request");
using (StreamReader reader = new StreamReader(this.Request.Body))
{
string requestBody = await reader.ReadToEndAsync().ConfigureAwait(false);
var events = JsonConvert.DeserializeObject[*]>(requestBody);
string response = string.Empty;
foreach (var eventGridEvent in events)
{
this.logger.LogInformation($"Received event of type - {eventGridEvent.EventType}");
...
// Send events to cosmosDb continer
}
}
}
}
}
  • файл csproj


net6.0
enable
enable












Подробнее здесь: https://stackoverflow.com/questions/791 ... pp-service
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»