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

162
Vistas
Liberar/Reducir el uso de memoria de ImageSharp después de su uso

Creé una aplicación WPF de prueba para probar SixLabors.ImageSharp para ver cómo funcionaba y si cumplía con algunos requisitos, etc. antes de cualquier integración en una aplicación de producción.

Mi aplicación de prueba consta de un control Imagen para mostrar la imagen que se manipulará y algunos botones para cargar una imagen, rotar y aplicar rotación.

Cuando se inicia la aplicación, consume aproximadamente entre 30 y 40 MB de memoria del sistema.

Sin embargo, tan pronto como aplico una rotación a la imagen usando el siguiente código y la guardo en el disco, el uso de la memoria pasa de ~25-40 MB a ~300-500 MB.

Si aplico una segunda rotación a la imagen, el uso de la memoria vuelve a subir hasta unos ~600-800 MB.

Si aplico una tercera rotación a la imagen, el uso de la memoria vuelve a subir hasta unos ~850-1000 MB.

Si aplico una cuarta rotación a la imagen, el uso de la memoria cae alrededor de donde se realizó la primera rotación, en algún lugar ~ 300-500 MB.

Estoy especificando que la aplicación usa MinimalPooling para intentar mantener bajo el uso de la memoria.

 Configuration.Default.MemoryAllocator = ArrayPoolMemoryAllocator.CreateWithMinimalPooling();

código de rotación

 private void ApplyRotation() { string output; using (SixLabors.ImageSharp.Image image = SixLabors.ImageSharp.Image.Load(imageToProcess)) { // Decide based on the angle which rotation to use/ // Rotate the image in place. // 'x' signifies the current image processing context. switch (angle) { case 0: case 360: break; case 90: image.Mutate(x => x.Rotate(RotateMode.Rotate90)); break; case 180: image.Mutate(x => x.Rotate(RotateMode.Rotate180)); break; case 270: image.Mutate(x => x.Rotate(RotateMode.Rotate270)); break; } // The library automatically picks an encoder based on the file extension then // encodes and write the data to disk. // You can optionally set the encoder to choose. output = imageToProcess; image.Save(output); } }

En cuanto a la documentación de ImageSharp , afirma que ImageSharp retiene aproximadamente 300-400 MB de memoria debido a su uso de ArrayPools. Esto explica el primer salto de memoria cuando la biblioteca se usa por primera vez, sin embargo, los saltos posteriores en el uso de la memoria no los entiendo ni sé cómo liberarlos.

he utilizado

 Configuration.Default.MemoryAllocator.ReleaseRetainedResources();

como se encuentra en su documentación, que creo que debería liberar los recursos que se están reteniendo. Este no parece ser el caso. Si aplico 3 rotaciones a mi imagen y el uso de la memoria es de alrededor de 1 GB, en ningún momento de la ejecución de la aplicación se reducirá a menos de 300 MB, incluso si los controles se usan en otra ventana y luego se cierran.

¿Alguien sabe cómo reducir este uso de memoria o deshacerse de todo para que el uso de memoria vuelva a la normalidad?

Gracias

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