kit*_*une 16 wpf performance ui-virtualization vector-graphics
我目前正在开发一种可视化工具,可以在Canvas上绘制路径,椭圆等WPF形状.我已经实现了一种虚拟化方法,其中Shapes被动态销毁和创建,具体取决于它们的可见性.然而,即使只有600个椭圆可见,该应用程序似乎很难.
我有什么选择加快速度?我正在考虑将分组的Shapes(一次说500个)渲染为透明位图,并且只在Canvas上绘制这些.但我不知道这是不是一个好主意......从我收集的内容来看,这需要某种黑客攻击,如果应用了转换:
VisualBrush shapeBrush = new VisualBrush(shape);
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
using (drawingContext)
{
drawingContext.DrawRectangle(shapeBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight)));
}
renderTarget.Render(drawingVisual);
Run Code Online (Sandbox Code Playgroud)
那么使用一个大的WritableBitmap呢?这会是另一种方法吗?
封面下的WPF使用图纸和几何图形 - 当你说你正在使用形状时,这些实际的UIElements是什么?这些元素的重量相当大.如果您只使用基本(最好是流)几何来绘制图纸,您将获得我的经验中的最佳性能.
我设法用这种方法以合理的帧速率获得大约10000个点,但是比点更复杂的东西开始减慢速度(比如圆点或甚至是矩形).如果您想尽可能避免WPF开销,仍然可以使用基本几何图形和基本图形.
可写位图显然最终更快,但这意味着自己渲染所有这些形状,或者,如果它主要是静态的,则缓存结果位图.此外,您通常希望在渲染到位图之前应用变换,而不是将它们应用于渲染的位图本身.
| 归档时间: |
|
| 查看次数: |
8017 次 |
| 最近记录: |