[英]Why is dotnet WASM so slow?
我正在做一些簡單的基准測試,我發現編譯為 WASM 的 .NET 7 比 vanilla JS 慢 16 倍:
namespace Benchmark
{
public partial class MainJS
{
public static async Task Main()
{
var watch = new System.Diagnostics.Stopwatch();
watch.Start();
Int64 x = 0;
for (int i = 0; i < 100000000; i++)
x += i;
watch.Stop();
Console.WriteLine($"Execution Time: {watch.ElapsedMilliseconds} ms {x}");
}
}
}
結果是:
Execution Time: 16482 ms 4999999950000000
雖然香草 js:
console.time("a")
let x = 0;
for (i=0; i<100000000; i++)
x += i
console.timeEnd("a")
console.log(x)
結果是:
a: 1084.294921875 ms
4999999950000000
當運行時性能如此糟糕時,我很難看到 do.net wasm 對 web 應用程序的好處。
問題是我的 C# 沒有被提前編譯成 WASM。
我必須確保我有
<PropertyGroup>
<RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup>
在 my.csproj 然后運行
dotnet publish -c Release
這確保您的 C# 提前 (AOT) 編譯為 WASM。 如果您不這樣做,那么您的 C# 將被編譯為 .DLL 文件中的中間語言 (IL)。 瀏覽器然后下載 .DLL 文件並將其傳遞給 WASM 運行時內的 .NET 運行時(這要慢幾個數量級,因為您基本上是在 VM 內運行 VM)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.