【问题标题】:WPF PathGeometry renderingWPF PathGeometry 渲染
【发布时间】:2013-01-25 23:19:41
【问题描述】:

我有一个包含一条折线的 PathGeometry,并以固定的间隔向该线添加一个新点(以绘制波形)。使用 Perforator 工具时,我可以看到每次向线条添加一个点时,WPF 都会将整个 PathGeometry 标记为“脏”,从而导致重新渲染整个形状。

我希望它只会重绘单个像素。有没有办法做到这一点?

【问题讨论】:

  • 您真的遇到了性能问题吗?折线有多少个点?
  • @Clemens 我只是在做一个可行性研究来决定该绘图仪应用程序(Winforms/D3D/WPF)使用哪种技术,所以我还没有遇到性能问题,因为我是用一行测试,但最终的应用程序将有更多的行。它必须重绘屏幕的大部分而不是单个像素,这让我很担心。
  • 那你不应该停留在Path/PathGeometry,还要考虑低级渲染。看看WPF Graphics Rendering Overview 文章。此外,通过WriteableBitmap 进行渲染可能值得一看。
  • 话虽如此,您还应该研究一个真实世界的例子。用多条线进行渲染并评估实际性能。 WPF 渲染受益于硬件加速,这可能使其性能比 WinForms 高得多,即使它经常需要重绘整个可视层。你也可以看看Optimizing WPF Application Performance

标签: wpf performance profiling rendering hardware-acceleration


【解决方案1】:

简短的回答是不。

WPF 在更改时弄脏整个几何图形是正确的,因为它考虑了当前路径值也发生变化的情况。

如果您将其分解,您可以使用行列表而不是路径。但是,
这意味着每次用户调整绘图区域的大小以保持比例时,您都必须更新线条值。

因此,要处理此问题,您可能会编写一些代码:
“如果用户调整大小 - 弄脏所有行”..

另一个问题是当您添加另一行时,
您可能想要挤压所有线条以适合您的绘图区域,
所以你可能会写一些代码说:
“如果新行添加 - 脏所有行”..

现在让路径几何行为与您的迷你引擎具有 1 对 1 的相似性..

如果您不需要或不想在新行中处理大小调整或改装,请添加,
只需使用行列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多