簡體   English   中英

為什么 do.net WASM 這么慢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM