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