「.NET MAUI RC3を試してみる(後編)」で AbsoluteLayout
パネルの描写性能をテストしましたがあまりに悪かったので正規な方法として GraphicView
での描写性能を確認してみました。
前回同様、ひたすらボールを書き続けてfpsを確認します。
(参考) AbsoluteLayout の場合
最高60fps、100個で30fps、300個で10fpsでした。
MAUI で GraphicView 利用の場合
描写性能としては AbusoluteLayout
の100倍ぐらいになります。1万個ぐらいは30fpsをキープ、3万個近くなると約10fpsとなりました。
(アップロードサイズ制限のため サイズ変更+10fpsのアニメーション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の性能も見てみたいですね。