2021年05月28日
川俣晶の縁側ソフトウェア技術雑記total 3722 count

Blazorの実行速度はAOTビルドでどれぐらい速くなるか? 【驚異の大加速】

Written By: 川俣 晶連絡先

前提 §

 C#のコードはデスクトップで実行する場合と比べてBlazorでは基礎体力として60倍ぐらい遅いことが分かっていた。

 遅い理由は.NETのコードをWASMのコードで解釈して実行していたかららしい。

 . NET 6 Preview 4ではAOTビルドで直接WASMのコードを生成でき、6倍高速化できるという。

 実際にどの程度高速化できるのだろうか?

結果 §

 以前60倍遅いという結果を得たベンチマークのプログラムをそのまま使用して速度を調べた。なお、実行はいずれも手元のデスクトップ上のChromeで実行されているので、比較条件は同じである。

 なお、ソースコードはこのページの後ろに付けたとおり。

従来ビルド §

testNum 00:00:34.7790000

testNum2 00:03:05.9170000

AOTビルド §

testNum 00:00:03.2040000

testNum2 00:00:04.8470000

考察 §

 6倍速いという主張はおそらく平均であって、基礎体力だけ比較すれば60倍は速いことが分かった。つまり、デスクトップ上のC#コードに遜色ない速度で走ることが分かった。ライブラリ関数に依存する割合の多いtestNumでも10倍ぐらい速い。

 しかしながら、以下の問題があるため、効果は限定的である。

  • WASMへのコンパイルは配置時にしか実行されない。デバッグ実行には使えない。
  • WASMへのコンパイルが猛烈に遅い。気軽に繰り返せるものではない。
  • AOTコンパイルの準備に手間が掛かりすぎる

 これらの問題は、改良によって取り除かれていくと思うので、将来に期待しよう。

 Blazorの未来には期待が持てる。

ソースコード(抜粋) §

using System;

using System.Runtime.CompilerServices;

using System.Text;

namespace ClassLibrary1

{

    public class Bench

    {

        private static int ext1 = 12;

        private static int ext2 = 34;

        private static int ext3 = 56;

        private static int ext4 = 78;

        private static int testNum()

        {

            int sum = 0;

            for (int i = 0; i < 100000000; i++)

            {

                sum += i + ext1 - ext2 * ext3 / ext4;

                sum += (int)(Math.Sin((double)(i/100))*100);

            }

            return sum;

        }

        private static int testNum2()

        {

            int sum = 0;

            for (int i = 0; i < 1000000000; i++)

            {

                sum += i + ext1 - ext2 * ext3 / ext4;

            }

            return sum;

        }

        public static string DoOne(Func<int> act, string label)

        {

            DateTime start = DateTime.Now;

            act();

            return $"{label} {DateTime.Now - start}\r\n";

        }

        public static string DoItAll()

        {

            StringBuilder sb = new StringBuilder();

            sb.Append( DoOne(testNum, "testNum"));

            sb.Append(DoOne(testNum2, "testNum2"));

            return sb.ToString();

        }

    }

}

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2021年
05月
30日
C#のコンパイラがどのバージョン(9.0など)でコンパイルしているか知りたい
3days 8 count
total 4017 count
【技術雑記】の前のコンテンツ
2021年
05月
28日
BlazorのAOTビルドができない
3days 6 count
total 3404 count

このサイト内の関連コンテンツ リスト

2021年
01月
10日
検証・Blazorの実行速度はどれぐらい遅いか? 【その遅さ桁違い】
3days 5 count
total 2516 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20210528093113
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.