繁体   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