C#/Silverlight/WPF/快速渲染大量圆形

C#/Silverlight/WPF/快速渲染大量圆形,c#,wpf,silverlight,graphics,C#,Wpf,Silverlight,Graphics,我想在silverlight或wpf(大约1000-10000)中以尽可能快的速度和频率渲染大量圆形或小图形。如果我必须去DX或OGL,那很好,但我想知道是否应该先在这两个框架中的任何一个框架中这样做(请阅读:如果答案是WPF only或Silverlight only,那就好了)。另外,如果有一种方法可以通过WPF访问DX并以这种方式在曲面上渲染,我也会对此感兴趣 那么,画大量圆圈的最快方法是什么?它们可以是必要的平面,但它们确实需要有一个半径。目前,我正在为每个圆使用DrawingVisua

我想在silverlight或wpf(大约1000-10000)中以尽可能快的速度和频率渲染大量圆形或小图形。如果我必须去DX或OGL,那很好,但我想知道是否应该先在这两个框架中的任何一个框架中这样做(请阅读:如果答案是WPF only或Silverlight only,那就好了)。另外,如果有一种方法可以通过WPF访问DX并以这种方式在曲面上渲染,我也会对此感兴趣

那么,画大量圆圈的最快方法是什么?它们可以是必要的平面,但它们确实需要有一个半径。目前,我正在为每个圆使用DrawingVisual和DrawingContext.DrawEllipse()命令,然后将视觉效果渲染为RenderTargetBItmap,但随着圆数的增加,渲染速度会变得非常慢


顺便说一句,这些圆会移动每一帧,所以缓存不是一个真正的选项,除非你建议缓存单个圆。但是它们的大小是动态的,所以我不确定这是一个好方法。

在Silverlight 3.0+中,很可能会使用WriteableBitmap来实现这一点。在WPF中,它也可能是一个不错的选择

我用Silverlight编写了两个演示应用程序。他们可能是小马车,但他们证明了这一点

  • 。当然可以优化。表现不是很好,但那是因为我做了一些愚蠢的事情。我相信它有2500个椭圆:
  • 。我记不起这里有多少个物体,但有一万多个

  • 查看Silverlight,它肯定也适用于WPF。圆圈功能包括一个示例。

    如果您想要速度,请不要使用绘制椭圆-预生成大小和颜色的圆圈,并使用写入位图,您将获得完整的BitBlt加速

    根据您的背景、透明度需求或抗锯齿,这可能很困难,但速度会快几个数量级

    使用抗锯齿线绘制速度很慢,但对于大多数事情来说都可以,因为它可以改变结果,可以缓存结果,并且可以得到多个帧


    但是,如果要尽可能快地绘制,请使用不透明位图

    虽然您已经接受了答案,但如果您发现需要使用DirectX9(与更高版本的交互有点困难,但仍然可以完成(取决于硬件)),您可以使用D3DImage组件。这是详细的代码项目


    另一个选项是,您可以使用主机和WinForms控件,并使用该控件的hWnd创建D3D设备。

    只是好奇,为什么您要绘制10000个动态大小的圆圈?这是一个游戏。它们都可以生长、收缩等等。注意,通过编辑,我对这个问题没有任何所有权。此外,SO的趋势是没有问候语(如“嗨”、“你好”、“我希望你能帮我”)或签名(如“-Walt W”)。有关更多信息,请参阅Meta StackOverflow上的文章:查理斯·佩佐尔德(Charles Petzold)的文章。它描述了如何准确地完成您想要的任务。@casperOne,我不能忽略问候:)。我想知道用英语说“更多”是否可以。如果这是愚蠢的,我的意思是更多:)。更多的方式:)我会看看这些,虽然我正在寻找相当高的帧率,在那里,2500个椭圆看起来每帧需要一秒钟。谢谢:)。一秒钟不是帧速率。现在是初始化时间。帧率相当高。没有冻结,没有跳跃,一切顺利。关于这个问题-它支持填充形状吗?我只在演示中看到了大纲。作为说明,这可能没那么糟糕,但我很好奇。目前没有对填充的支持,但它已在列表中,并将在不久的将来实施。虽然我还有很多其他项目。:)