Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

504
Vistas
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 la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda