En nuestra aplicación, estamos leyendo un archivo XPS utilizando la clase System.IO.Packaging.Package. Cuando leemos de un flujo de un paquete compartido, podemos ver en el Administrador de tareas que aumenta el consumo de memoria de la aplicación. Sin embargo, cuando se realiza la lectura, el consumo de memoria no vuelve a ser lo que era antes de leer desde la secuencia.La lectura desde la transmisión PackagePart no libera la memoria
Para ilustrar el problema, escribí un ejemplo de código simple que puede usar en una aplicación wpf independiente.
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
_package = Package.Open(@"c:\test\1000pages.xps", FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
private void ReadPackage()
{
foreach (PackagePart part in _package.GetParts())
{
using (Stream partStream = part.GetStream())
{
byte[] arr = new byte[partStream.Length];
partStream.Read(arr, 0, (int)partStream.Length);
partStream.Close();
}
}
}
Package _package;
private void Button_Click(object sender, RoutedEventArgs e)
{
ReadPackage();
}
}
El método ReadPackage() leerá todos los contenidos de transmisión en los objetos PackagePart en una matriz local. En la muestra, utilicé un documento XPS de 1000 páginas como fuente del paquete para ver fácilmente el cambio en el consumo de memoria de la aplicación. En mi máquina, el consumo de memoria de la aplicación independiente comienza en 18 MB y luego aumenta a 100 MB después de llamar al método. Llamar nuevamente al método puede aumentar el consumo de memoria, pero puede volver a 100MB. Sin embargo, ya no recae en 18MB.
¿Alguien ha experimentado esto al usar PackagePart? ¿O lo estoy usando mal? Creo que la implementación interna de PackagePart está almacenando en caché los datos que se leyeron.
¡Gracias!
No tengo idea de por qué esta pregunta fue downvoted. –