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

168
Visualizações
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 à 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