C#调用XpsDocument存储xps文档,内存如何释放?

var xpSfile = string.Format("{0}.xps",Guid.NewGuid().ToString());
            var paginator = ((IDocumentPaginatorSource)preview.Document).DocumentPaginator;
            using (var xpsDoc = new XpsDocument(xpSfile, FileAccess.ReadWrite, CompressionOption.Maximum))
            {
                using (var xpp = new XpsPackagingPolicy(xpsDoc))
                {
                    using (var rsm = new XpsSerializationManager(xpp, false))
                    {
                        rsm.SaveAsXaml(paginator);
                        rsm.Commit();
                        xpsDoc.Close();
                    }
                }
            }

1、生成一份xps文档增加2M内存,循环生成1000份,内存只增不减,无法释放

2、等到内存涨到1G左右,就会报错“打开文件“C:\WINDOWS\FONTS\SIMSUN.TTC”时 I/O 错误。”

3、网上说的 GC.Collect();SetProcessWorkingSetSize、EmptyWorkingSet都不好使

 

找到原因是WPF实例化后不会释放内存,不知道为什么,尽量少实例化WPF对象,

又发现新问题 PdfSharp.Xps.XpsConverter.Convert(pdfXpsDoc, fileName, 0);占用内存极高,也是无法释放,还没解决

using了的话问题应该不是出在这几个对象身上吧,确定是这一段代码的问题吗?

        ///<Summary>
        /// Handles releasing XpsDocuments resources
        ///</Summary>
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }
            
            if (disposing)
            {
                _thumbnail = null;
                _reachSignatures = null;
                _reachSignatureList = null;
                _opcPackage = null; 
 
                CurrentXpsManager.Close();
                CommitInternal();
            }
 
            GC.SuppressFinalize(this);
            _disposed = true;
        }
 

这是Dispose的实现,你调用Close的时候他自己调用了Dispose(true)

请问如何解决?

少实例化WPF对象?

是指那些内容?XpsPackagingPolicy?