问题标签 [fixeddocument]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - VisualBrush 做“懒惰评估”?
我在更多迭代(每次迭代一页)中创建 FixedDocument,如下所示:
在每次迭代中,我都会稍微更改 MainGrid。所以每个页面都应该包含 MainGrid 的实际状态。但是打印的文档包含与上次迭代内容相同的页面(换句话说 - 最后一个状态在文档的所有页面上)。VisualBrush有什么“懒惰的评价”之类的吗?
pagination - 渲染后处理流文档页面
上面的代码没有释放任何东西。一旦对流文档进行分页并获取页面的视觉表示,则流文档的内容将由 Visual 引用。因此,Visual 和 flowdocument 的内容都不会被处理。上面这段代码在执行时连续出现内存不足。
有谁知道如何释放所有这些资源所持有的内存?
提前致谢。
wpf - 将 FixedDocument 保存到 XPS 文件会导致内存泄漏
我创建了一个 .NET Windows 服务,它执行某些操作并生成报告。这些报告是我保存在某个目录中的 XPS 文档。
熟悉 WPF,我选择创建报告的方式是实例化 a System.Windows.Documents.FixedDocument
,根据需要添加FixedPage
具有内容的对象。
我的问题是服务内存使用量随着时间的推移不断上升。
起初,我严格检查了我的代码,确保所有一次性对象都被释放,等等,以及其他明显的内存泄漏候选,但仍然存在问题。然后我使用 CLR Profiler 详细查看了 Service 的内存使用情况。
我发现当服务生成这些报告并将它们保存为 XPS 文件时,与对象(、、、、等)FixedDocument
关联的所有各种 UI 元素都保留在内存中。FixedDocument
Dispatcher
FixedPage
UIElementCollection
Visual
当我在我的 WPF 应用程序中做同样的事情时,这似乎不会发生,所以我的直觉是它与在 WPF 应用程序之外使用的 WPF UI Dispatcher 模型有关。
FixedDocument
在这样的服务中(或一般在 WPF 应用程序之外)使用对象时,如何“处置”我的对象?
======== 编辑 =========
好的,我发现我的内存泄漏与创建/填充 FixedDocument 无关。如果我这样做了,但实际上并没有将它作为 XPS 保存到磁盘,则不会发生内存泄漏。所以,我的问题一定与另存为 XPS 文件有关。
这是我的代码:
我试过的:
- 手动垃圾收集
- 在获取它的分页器之前调用
UpdateLayout()
每一页myFixedDocument
(如下面的答案中所建议) - 我也尝试过myFixedDocument
直接传递给Write()
ie 而不是分页器 - 将这些代码行放在自己的线程中并手动关闭调度程序
仍然没有运气。
========== 解决方法 ==========
通过使用http://msdn.microsoft.com/en-us/library/system.appdomain.aspx示例中所示的通用方法将上述代码隔离到它自己的 AppDomain 中,内存泄漏不再影响我的服务(我说“不再影响”,因为它仍然会发生,但是当 AppDomain 被卸载时,所有泄漏的资源都会被卸载)。
我仍然渴望看到一个真正的解决方案。
(在相关说明中,对于那些感兴趣的人,使用单独的 AppDomain 会导致我用来将某些 XPS 文件转换为 PDF 文件的 PDFSharp 组件中的内存泄漏。原来 PDFSharp 使用在正常情况下不会增长的全局字体缓存显着。但是使用这些 AppDomain 后缓存越来越大。我编辑了 PDFSharp 源代码,使我能够手动清除 FontDescriptorStock 和 FontDataStock,解决了这个问题。)
========== 解决方案 ==========
请参阅下面的答案以获取最终解决方案。
.net - WPF 打印大报表导致 OutOfMemoryException
我创建了一个每月打印的 FixedDocument 报告。它的平均长度约为 350 页,其中大约一半的页面是约 200kb 的 jpeg 图像。该报告在 DocumentViewer 中显示得很好,但我在尝试打印它时遇到了问题。
使用时
如果我只是尝试打印前三分之一的月份数据,例如。120页,很好用。但是,如果我尝试整个月,大约在第 160 页,我会收到以下错误
然后我认为我可以通过将文档拆分为 30 页的小文档来一次打印 30 页来胜过它:
但这只是导致完全相同的错误。我已经尝试从中点到月底打印一百页,这很有效,所以它必须是页面的数量而不是特定的图像(图像只是 jpeg 全部来自一个来源,最大大小 400kb)。
我看到一次打印 30 页时正在使用的内存量
然后在下一批以 1281Mb 崩溃
我已经在一台真正的打印机和 XPS windows 打印机上进行了测试。当我记下这些内存值时,我一直等到每个部分都完全假脱机并打印出来。
我不明白为什么当我将它们分成单独的单独文档时它只是这样构建。我必须处理一些东西,但我不确定是什么?
xps - 与 XP 相比,什么会导致 XPS FixedDocument 在 Windows 7 上看起来不同?
我有一个程序可以生成一个 FixedDocument 对象并将其显示在 XPS DocumentViewer 中。根据 MSDN 上的文档,“固定文档适用于需要精确的“所见即所得”(WYSIWYG) 演示的应用程序,与所使用的显示器或打印机硬件无关。”
然而,这正是我想要的..
当我在 Windows XP 和 Windows 7 的 XPS DocumentViewers 中打开同一个文档时,文档的呈现方式存在很大差异。Windows 7 版本似乎使用了更大的字体和更大的元素间距。什么会导致这种情况?FixedDocument 的目的难道不是不管操作系统、打印机或其他任何东西,它看起来总是一样吗?
我已经对该主题进行了一些谷歌搜索,但找不到任何相关内容,并感谢您提供的任何建议。
谢谢!
c# - 固定文档页面大小
我正在从网上提取图像并将其添加到 FixedDocument 页面。我拉的图像尺寸为 1200px X 1500px。但是在 FixedDocument 中,图像显示为小缩略图(请参阅屏幕截图)。
下面给出的是代码片段。
我需要图像按照其尺寸而不是缩略图显示。请问有人可以让我知道需要做什么才能根据其大小显示图像吗?
非常感谢。
c# - 固定文档动态页面插入
我正在尝试在我的固定文档中循环插入动态页面
但是在第一页之后它给出的错误内容已经是另一个控件的子控件。您能指导我如何将页面添加到您的固定文档。如何制作页面数组?
c# - wpf 固定文档动态数据
我正在FixedDocument
动态地创建和添加页面。
代码仍然给出 page1content 是另一个父级的子级的错误。
c# - 如何设置 Xps 文档的页面大小?
我正在尝试使用FixedDocument保存 XPS 文档。到目前为止,我未能更改页面大小。如何将其更改为自定义尺寸?
我的代码基于这个问题的第一个答案,更具体地说,我正在使用这个代码:
它将用户控件复制到 XPS 文档中并成功完成,但正如我所说,使用默认纸张大小。
我尝试使用该DocumentPaginator.PageSize
属性来设置新的页面大小(在实例化之后FixedDocument
),但是我分配给该属性的任何内容似乎都被忽略了;生成的 XPS 文档中的页面保留其默认纸张大小。
逐步执行时,我可以看到PageSize
属性的值确实发生了变化,所以它并不像新值不被DocumentPaginator
.
我找到了各种在线资源,但都没有解决我的问题:
- 这个在 MS Social 上发帖的论坛坚持认为设置
PageSize
属性是有效的,但据我所知并没有。 - 文档声称设置
PageSize
属性有效,并提供了一个与我尝试过的相同的示例。(除此之外,基于此文档页面,我什至无法说出要使用的数字的单位。) - 文档还指向
DocumentPage.Size
属性,但是该属性不能公开更改。在将页面添加到文档之前,我是否真的必须覆盖某些页面类才能获得不同的页面大小? - 这个论坛帖子描述了同样的问题,但答案对我来说似乎很荒谬。我
DocumentPaginator
只使用过一次该属性,因此没有“再次调用 (...).DocumentPaginator”可以保存一个实例。 - 这个问题听起来很有希望,但实际上不是关于页面大小,而是关于给定页面上图像的比例。
- 除了前面提到的属性(
PageSize
无论如何这里设置为默认大小),本教程使用. 但是,为快速测试分配一些正随机值会导致我的 XPS 文档明显损坏,并且 XPS 查看器在打开它时会显示错误消息。Width
Height
FixedPage
c# - 创建固定文档会导致内存泄漏
我在我的应用程序中创建 WPF 报告,我发现每次创建报告时,报告都会保留在内存中。我完全清除了文档内容,并且只打印了一个空的 UserControl。我将代码减少到最低限度,但它仍然在泄漏。你知道我做错了什么 - 或者我没有做什么吗?
分析表明问题在于 ContextLayoutManager 在 ContextLayoutManager.LayoutQueue.Request 中的 FixedPage 上保持引用
感谢您的任何建议。