I'm dynamically generating long structured lists into xps using XpsDocumentWriter and VisualsToXpsDocument classes. The documents can potentially contain thousands of pages however this consumes a very large amount of memory, rapidly growing with page count. I've tracked down the excessive allocation to the XpsFixedDocumentReaderWriter, which seem to cache the contents of each page in a StringWriter even though this is never used again after the page has been committed to the package.
When I'm forcibly clearing the backing cache (clearing the StringBuilder in XpsFixedPageReaderWriter._pageStream in XpsFixedDocumentReaderWriter._pageCache with reflection, a very hackish workaround) the memory growth is much more manageable.
Also when closing/disposing the XpsDocument instance memory usage has a sudden extreme peak (regardless of the workaround above), usually 2-3x the total uncompressed size of the result document. I haven't been able to pinpoint this latter excessive usage, but I'm suspecting the packaging api pulls the entire document into memory.