首页 > 解决方案 > Raspberry Pi 2 上的 dotnet 核心速度很慢

问题描述

Dotnet 核心运行时在 Raspberry Pi 2 上启动缓慢

Raspberry Pi 2 是使用来自 Raspbian 站点的 Lite (Raspbian 10, Buster) tar 文件设置的。

我安装了openssh、php7.1、dotnet runtime 和mono。我已经在一个单独的 linux 机器上运行了一个 RabbitMQ 服务器。

我正在使用 RabbitMQ 站点https://www.rabbitmq.com/getstarted.html上的入门示例 #1 (hello-world) 发送代码

在我的 Raspberry Pi 2 上,我安装了以下内容

添加到示例教程代码中,我添加了秒表,以便我可以测量经过的时间。

结果如下

我的印象是 Dotnet 核心中的编码会比框架(使用单声道)更快。

所以我认为它可能是 RabbitMQ 库(NuGet - RabbitMq.Client)

因此决定在 console.write 中只使用 Hello World 创建两个新项目。

结果非常相似。

我希望用 C# 编写我的应用程序,但除非我能解决性能问题,否则 PHP 似乎是我项目的最佳选择。

有什么我可以尝试提高性能的吗?

经过大量搜索,我发现了类似的问题,但是这些文章很旧,并且在早期版本中提到了 dotnet core 2.1。我有点希望通过 dotnet core 2.2 版本支持的 Arm CPU 会更好。尤其是在推动物联网方面。

我在 Raspberry Pi 2 中运行的 Arm CPU 是 ARMv7 rev 5 (v71)。

我尝试了 Raspberry Pi 1、2 和 3,但遗憾的是结果相同。除了在 Raspberry Pi 1 上,您无法安装 dotnet(在 ARMv6 CPU 上不支持),因此仅对 mono 和 PHP 进行了测试。

有任何想法吗....

标签: .net-coremonoraspbianraspberry-pi2

解决方案


为了缩短启动时间,您可以根据指导和我的经验做一些事情。

  1. 如果可能的话,将您的应用迁移到 dotnetcore3.0,这似乎具有显着的性能和启动优势。

  2. 在您的 csproj 中启用分层编译。如此处所述https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#tiered-compilation

<PropertyGroup>
  <TieredCompilationQuickJit>true</TieredCompilationQuickJit>
  <TieredCompilation>true</TieredCompilation>
</PropertyGroup>
  1. 通过在您的 csproj 中启用它来使用 ReadyToRun 图像。如此处所述https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#tiered-compilation 在 csproj 中。

在发布单个 exe 时,还可以考虑使用修剪功能来减少二进制文件的大小。这减少了执行应用程序需要从磁盘读取的数据量。

这个问题也在 Amazon Lambda的上下文中讨论过,冷启动时间非常长。 在此处输入图像描述 到目前为止,似乎最好的方法是减少 dll 大小,使用 ReadyToRun 来减少 JIT 时间和分层编译。当与 dotnetcore3.0 结合使用时,这些更改对我们非常有效。

Scott Hanselman 在这里提供了一些指导https://www.hanselman.com/blog/MakingATinyNETCore30EntirelySelfcontainedSingleExecutable.aspx


推荐阅读