Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

503
Visualizações
Fuga de memoria C# de SqlConnection

He estado luchando tratando de identificar por qué uno de mis servicios ocupa espacio en la memoria crece con el tiempo. Al tratar de identificar la fuga de memoria, configuré un entorno de prueba y comenté el código, una llamada a la vez para tratar de aislar al culpable. Para mi sorpresa, me quedé con un programa simple que abrió una conexión a una base de datos de Sql Server y la cerró sin enviar ningún comando, pero aún tenía la pérdida de memoria. El programa completo de .NET 4.8 se encuentra a continuación.

 static void Main(string[] args) { var Logger = new LoggerConfiguration() .WriteTo.File(LogFilePath, rollingInterval: RollingInterval.Day) .CreateLogger(); while (true) { PollDB(); Logger.Information($"Memory in use after processing: {Process.GetCurrentProcess().PrivateMemorySize64.ToString("N0")}B"); Thread.Sleep(new TimeSpan(4, 0, 0)); } } static private void PollDB() { string cstring = ConfigurationManager.ConnectionStrings["AdminDB"].ConnectionString; using (var conn = new SqlConnection(cstring)) { conn.Open(); conn.Close(); } }

Aquí está la salida del registro:

 2022-01-25 14:12:10.641 -05:00 [INF] Memory in use after processing: 15,056,896B 2022-01-25 18:12:10.796 -05:00 [INF] Memory in use after processing: 24,465,408B 2022-01-25 22:12:11.230 -05:00 [INF] Memory in use after processing: 32,997,376B 2022-01-26 02:12:11.384 -05:00 [INF] Memory in use after processing: 41,586,688B 2022-01-26 06:12:11.824 -05:00 [INF] Memory in use after processing: 49,975,296B 2022-01-26 10:12:11.947 -05:00 [INF] Memory in use after processing: 58,253,312B 2022-01-26 14:12:12.420 -05:00 [INF] Memory in use after processing: 66,899,968B 2022-01-26 18:12:12.543 -05:00 [INF] Memory in use after processing: 75,354,112B 2022-01-26 22:12:12.773 -05:00 [INF] Memory in use after processing: 83,755,008B 2022-01-27 02:12:13.162 -05:00 [INF] Memory in use after processing: 92,155,904B 2022-01-27 06:12:13.274 -05:00 [INF] Memory in use after processing: 100,581,376B 2022-01-27 10:12:13.716 -05:00 [INF] Memory in use after processing: 109,121,536B

Aparte del código de serilog, el único código que podría estar acaparando memoria es la conexión sql. Y estoy bastante seguro de que el código de serilog no tiene la culpa porque si comento la llamada PollDB(), no hay pérdida de memoria.

Otra cosa a destacar. Puedo tomar el mismo programa y cambiar el tiempo entre las encuestas de la base de datos a 12 horas y el uso de la memoria crecerá al mismo ritmo. En otras palabras, el uso de la memoria depende del tiempo que se ejecuta el programa, no del número de conexiones sql realizadas.

He usado un generador de perfiles de memoria y es la memoria no administrada la que crece con el tiempo.

¿Alguien ha experimentado esto antes? ¿Hay algún parámetro de cadena de conexión que pueda resolver este problema? ¿Una revisión del sistema operativo?

over 4 years ago · Santiago Trujillo
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda