我需要在WPF中绘制大量的2D元素,例如线条和多边形.他们的立场也需要不断更新.
我在这里看了很多答案,主要建议使用DrawingVisual或覆盖OnRender函数.为了测试这些方法,我实现了一个渲染10000个椭圆的简单粒子系统,我发现使用这两种方法绘制性能仍然非常糟糕.在我的电脑上,我每秒钟不能超过5-10帧.当你考虑我使用其他技术可以轻松地平滑地抽取50万个粒子时,这是完全不可接受的.
所以我的问题是,我是否违反了WPF的技术限制,或者我错过了什么?还有其他我可以使用的东西吗?欢迎任何建议.
这里是我试过的代码
MainWindow.xaml的内容:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="500" Width="500" Loaded="Window_Loaded">
<Grid Name="xamlGrid">
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml.cs的内容:
using System.Windows.Threading;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
EllipseBounce[] _particles;
DispatcherTimer _timer = new DispatcherTimer();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//particles with Ellipse Geometry
_particles = new EllipseBounce[10000];
//define area particles can bounce around in
Rect stage = new Rect(0, 0, 500, …Run Code Online (Sandbox Code Playgroud) DrawLine, DrawPath等等的方法(就像在.NET 2中一样).我知道有很多东西,比如故事板等.但是我打算在后面的代码中完成所有绘图,并且在WPF中只有1个Canvas而没有任何子元素.