gpt4 book ai didi

c# - 使用 WPF 可视层的高性能图形

转载 作者:IT王子 更新时间:2023-10-29 04:33:04 27 4
gpt4 key购买 nike

我正在创建一个 WPF 映射程序,它可能会在任何时候将数百个文件加载并绘制到屏幕上,并且用户可能想要缩放和平移此显示。其中一些文件类型可能包含数千个点,这些点很可能以某种路径的形式连接。其他支持的格式包括 TIFF 文件。

将所有数据绘制到一个 DrawingVisual 是否对性能更好,还是我应该为每个加载的文件创建一个新的 DrawingVisual?

如果有人可以就此提供任何建议,我们将不胜感激。

最佳答案

您会在 Stack Overflow 上找到很多相关问题,但并非所有问题都提到将大量数据绘制到屏幕的一种最高效的方法是使用 WriteableBitmap应用程序接口(interface)。我建议看看 WriteableBitmapEx codeplex 上的开源项目。 披露,我曾经为此做出过贡献,但这不是我的图书馆

在尝试过 DrawingVisual、StreamGeometry、OnRender、Canvas 之后,一旦您必须在屏幕上绘制 1,000 多个或更多“对象”,所有这些都会失败。有处理 Canvas 虚拟化的技术(虚拟化 Canvas 有一个 million items demo),但即使这样也仅限于在减速前一次可见的 ~1000 个。 WriteableBitmap 允许您直接访问位图并在其上绘制(oldskool 风格),这意味着您可以快速绘制数万个对象。您可以自由实现自己的优化(多线程、详细程度),但请注意您不会对那个 API 有过多的修饰。您实际上是在自己完成工作。

不过有一个警告。 WPF 使用 CPU 进行分割/GPU 进行渲染,而 WriteableBitmap 将使用 CPU 来处理所有事情。因此,填充率(每帧渲染的像素数)成为瓶颈,具体取决于您的 CPU 能力。

如果你真的需要高性能渲染,我建议看一下 SharpDX (托管 DirectX)以及与 WPF 的互操作。这将为您提供最高性能,因为它将直接使用 GPU。

关于c# - 使用 WPF 可视层的高性能图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8713864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com