初投稿です。
導入
ついにきましたね、.NET 6。
この記事( https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/#blazor-and-mono )によると
Blazor WebAssemblyにAOTコンパイルが実装され16倍早くなったらしいのですが、実際どれくらい早くなったか試してみました。
測定内容
10^6以下の素数を列挙するのにかかる時間を測定してみました。n=10^6として以下の関数の実行にかかる時間の測定を10回行い、平均と最大をとりました。
Blazor WebAssemblyは.NET6でReleaseビルド、AOTあり/なしを測定しました。
比較用に.NET6でのConsoleアプリケーションでの結果もとりました。
AOTを有効にするには公開(Publish)を実行する必要があります、普通に実行するだけではうまくいきません。
ちなみに、AOTなしに関しては.NET5/.NET6で差がみられなかったので.NET5は省略しています。
private IEnumerable<int> FindPrimes(int n)
{
if (n < 0)
{
return Array.Empty<int>();
}
var isPrime = new bool[n + 1];
Array.Fill(isPrime, true);
isPrime[0] = false;
isPrime[1] = false;
for (int i = 2; i < isPrime.Length; i++)
{
if (!isPrime[i])
{
continue;
}
for (int j = i << 1; j < isPrime.Length; j += i)
{
isPrime[j] = false;
}
}
return isPrime.Select((x, i) => (x, i)).Where(tuple => tuple.x).Select(tuple => tuple.i);
}
環境
OS Windows10 64bit(21H2)
CPU Ryzen7 1700 (@3.7Ghz)
RAM DDR4-3000 16GB (十分な空きあり)
結果
環境
平均値
最大値
Blazor AOTなし
1986ms
1995ms
Blazor AOTあり
574ms
579ms
Console
50.8ms
124ms
考察
純粋な計算での比較でしたが3.4倍以上は高速化されており、効果は大きいようです。
しかし依然としてコンソールアプリケーションよりは10倍以上遅い
もう少し早くなってくれるといいんですがね、今後に期待しましょう。
↧