WPF 캔버스에 라이다 점 데이터 표현

간단히 성능을 테스트해보았습니다.

public class DrawningCanvas : Canvas
{
    private static readonly Pen _pen;

    static DrawningCanvas()
    {
        _pen = new Pen(Brushes.Red, 1);
        _pen.Freeze();
    }

    public DrawningCanvas()
    {
        _ = Task.Run(async () =>
        {
            var timer = new PeriodicTimer(TimeSpan.FromMilliseconds(150));
            while (await timer.WaitForNextTickAsync())
            {
                await Dispatcher.InvokeAsync(InvalidateVisual);
            }
        });

       
    }
    protected override void OnRender(DrawingContext dc)
    {
        var rand = Random.Shared;
        var count = 3800;

        for (var i = 0; i < count; i++)
        {
            dc.DrawEllipse(Brushes.Red, _pen, new Point(rand.Next((int)ActualWidth), rand.Next((int)ActualHeight)), 3, 3);
        }
    }
}
<Window
    x:Class="WpfApp38.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WpfApp38"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <local:DrawningCanvas x:Name="canvas" />
</Window>

image

제 컴퓨터에서는 무리 없이 동작하는군요.

참고로 사용하는 Brush나 Pen의 Freeze() 유무에 따라 성능 차이가 많이 납니다.

9개의 좋아요