LoginSignup
1
1

More than 1 year has passed since last update.

.NET MAUI のGraphicViewで描写テスト

Last updated at Posted at 2022-06-05

.NET MAUI RC3を試してみる(後編)」で AbsoluteLayout パネルの描写性能をテストしましたがあまりに悪かったので正規な方法として GraphicView での描写性能を確認してみました。

前回同様、ひたすらボールを書き続けてfpsを確認します。

(参考) AbsoluteLayout の場合

最高60fps、100個で30fps、300個で10fpsでした。
mauia.gif

MAUI で GraphicView 利用の場合

描写性能としては AbusoluteLayout の100倍ぐらいになります。1万個ぐらいは30fpsをキープ、3万個近くなると約10fpsとなりました。
(アップロードサイズ制限のため サイズ変更+10fpsのアニメーションGIFです。)
gv.gif

参考:コード

主要な部分だけ抜粋します。

NewPage2.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns:local="clr-namespace:MauiApp1">
    <ContentPage.Resources>
        <local:GraphicsDrawable x:Key="drawable"/>
    </ContentPage.Resources>
    <StackLayout>
        <Button Text="Start" />
        <Slider x:Name="slider"/>
        <Label BindingContext="{x:Reference slider}" Text="{Binding Path=Value}" />
        <Label x:Name="fpslabel" />

        <GraphicsView x:Name="grahicsview" 
                      Drawable="{StaticResource drawable}"
                      WidthRequest="600" HeightRequest="400"/>
    </StackLayout>
</ContentPage>
GraphicsDrawable.cs
internal class GraphicsDrawable : IDrawable
{
    public void Draw(ICanvas canvas, RectF dirtyRect)
    {
        //外枠の描写
        canvas.DrawRectangle(dirtyRect.Inflate(-1, -1));

        //円をすべて描写
        canvas.FillColor = Colors.Black;
        foreach (var ball in MyApp.BallList)
        {
            ball.UpdatePos();
            canvas.FillCircle(new Point(ball.X, ball.Y), 2.5d);
        }
    }
}

所感

  • GraphicViewの場合、どういうわけか60fpsにならず30fps始まりです。画面の描写タイミングにTimerを使ったり、CompositionTarget.Rendering をタイミングに使ったりしたのですが変わらず。
  • ボールは全て黒塗りとしましたが、ボール毎に色を変えたら途端に性能が出なくなりました(1万個で10fps)。色指定でこんなに性能が変わるのもどうかとは思います・・
  • Windowsの場合、どうやら Skia.GraphicView ライブラリを使っていないかもしれません。AndroidやiOSではSkia版を使っていると思うのでSkiaの性能も見てみたいですね。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1