Blazor 中有没有办法将 map wasm-function(#) 反转回 c# 方法?

Is there a way in Blazor to reverse map wasm-function(#) back to the c# method?

我是 运行 Chrome 上的 Blazor 页面,我从 Chrome 分析器中看到它在代码 wasm-function(633) 上花费了大量时间。有什么办法可以告诉我这对应于什么 c# 代码吗?

我想提高页面的性能,这有助于在更改任何代码之前了解导致性能缓慢的原因。

我知道与 javascript 等相比,Blazor 的性能并不好,但我也通过有限的实验看到,某些 C# 技术的性能优于其他技术。我只是在寻找一种数据驱动的方法来找到我的慢点在哪里。

遗憾的是,我认为目前还不可能将 wasm 函数调用追溯到 C# 代码。 Blazor 使用已编译为 wasm 的 Mono 运行时。 wasm 函数实际上是单声道运行时代码,而不是我的 C# 代码。

我的 C# 代码被编译为在单声道中运行的中间语言 (IL)。我可能需要寻找未来的 Blazor 分析器或可以编译为 wasm 的单声道分析器以获得我正在寻找的东西。

您可以使用WasmEmitSymbolMap 属性,它允许在编译期间生成一个dotnet.js.symbols文件,您可以在其中找到wasm-function(633)对应的C#方法。

另一种方法是使用WasmNativeStrip 属性。通过将其设置为 false,您将不会删除 C# 方法名称。请注意,它只能在 AOT 编译模式下使用,并且会显着增加 dotnet.wasm 大小。

<PropertyGroup>
  ...
  <WasmEmitSymbolMap>true</WasmEmitSymbolMap>
  <WasmNativeStrip>false</WasmNativeStrip>
  ...
</PropertyGroup>

您可以在此处找到完整的属性列表 - https://github.com/dotnet/runtime/blob/main/src/mono/wasm/build/WasmApp.targets