Dans notre application, nous lisons un fichier XPS à l'aide de la classe System.IO.Packaging.Package. Lorsque nous lisons à partir d'un flux d'un packagePart, nous pouvons voir à partir du Gestionnaire des tâches que la consommation de mémoire de l'application augmente. Cependant, lorsque la lecture est terminée, la consommation de mémoire ne revient pas à ce qu'elle était avant de lire le flux. Pour illustrer le problème, j'ai écrit un exemple de code simple que vous pouvez utiliser dans une application wpf autonome.La lecture du flux PackagePart ne libère pas la mémoire
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();
}
}
La méthode ReadPackage() lit tout le contenu du flux des objets PackagePart dans un tableau local. Dans l'exemple, j'ai utilisé un document XPS de 1000 pages comme source de paquet afin de voir facilement le changement de consommation de mémoire de l'application. Sur ma machine, la consommation de mémoire de l'application autonome commence à 18 Mo puis s'élève à 100 Mo après l'appel de la méthode. Appeler la méthode à nouveau peut augmenter la consommation de mémoire à nouveau, mais il peut revenir à 100 Mo. Cependant, il ne retombe plus à 18 Mo.
Quelqu'un at-il déjà rencontré ce problème lors de l'utilisation de PackagePart? Ou est-ce que je l'utilise mal? Je pense que l'implémentation interne de PackagePart met en cache les données qui ont été lues.
Merci!
Je ne sais pas pourquoi cette question a été déclassée. –