小编bju*_*tus的帖子

从PackagePart流中读取不会释放内存

在我们的应用程序中,我们使用System.IO.Packaging.Package类读取XPS文件.当我们从PackagePart的流中读取时,我们可以从任务管理器中看到应用程序的内存消耗增加.但是,当读取完成后,内存消耗不会回落到从流中读取之前的内存消耗.

为了说明这个问题,我编写了一个简单的代码示例,您可以在独立的wpf应用程序中使用它.

 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();      
        }
 }
Run Code Online (Sandbox Code Playgroud)

ReadPackage()方法将所有PackagePart对象的流内容读入本地数组.在示例中,我使用了1000页的XPS文档作为包源,以便轻松查看应用程序的内存消耗变化.在我的机器上,独立应用程序的内存消耗从18MB开始,然后在调用该方法后上升到100MB.再次调用该方法可以再次提高内存消耗,但可以回落到100MB.但是,它不再回落到18MB.

有没有人在使用PackagePart时遇到过这种情况?或者我使用它错了?我认为PackagePart的内部实现是缓存读取的数据.

谢谢!

c# memory stream xps package

5
推荐指数
1
解决办法
1656
查看次数

标签 统计

c# ×1

memory ×1

package ×1

stream ×1

xps ×1