【发布时间】:2021-01-07 19:20:59
【问题描述】:
编辑:与此同时,我打开了an issue in the MSBuild GitHub project,因为这个话题已经 10 天没有收到任何回复了。
编辑 2:在下面查看我自己的答案。
我正在尝试构建一个面向 ASP.NET Core 3.1 的应用程序,启用 R2R publishing 以加速自动化 UI 测试的执行。 该解决方案有大约 30 个项目(+10 个测试项目),LOC 为 181k,根据 VS 代码指标,其中 54k 是可执行的。
我的机器有 4 核 / 8 线程,我进行了以下测量:
- 不使用 R2R 发布平均需要 2 分钟:
dotnet publish Solution.sln --configuration Release --output "publish" --runtime win-x64
- 对于 R2R,它介于 25 到 35 分钟之间:
dotnet publish Solution.sln --configuration Release --output "publish" --runtime win-x64 -p:PublishReadyToRun=true
在我测试的前几次迭代中,Windows Defender 明显受到干扰(持续旋转一两秒),但我暂时忽略了 crossgen.exe。 查看任务管理器,我还注意到 crossgen.exe 不会同时生成超过 4 个实例(这可能是对物理内核的硬限制吗?),但我没有看到其中超过 3 个在同时。此外,crossgen 进程的 CPU 使用率大多是几秒爆发到 15-20%(与总 CPU 使用率相比)。因此,“正常运行时间”和强度远低于 MSBuild 在正常构建过程中产生的结果。
我的 .NET 信息:
.NET SDK (reflecting any global.json):
Version: 5.0.101
Commit: d05174dc5a
Runtime Environment:
OS Name: Windows
OS Version: 10.0.19042
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\5.0.101\
Host (useful for support):
Version: 5.0.1
Commit: b02e13abab
.NET SDKs installed:
5.0.101 [C:\Program Files\dotnet\sdk]
.NET runtimes installed:
Microsoft.AspNetCore.All 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.23 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.23 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.16 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.23 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
所以我的问题是:我在工具/配置方面是否遗漏了什么或做错了什么? 10 倍的构建时间增加似乎相当极端......
【问题讨论】:
-
我也经历过类似的差异。奇怪的是,到目前为止,R2R 发布并没有像标准一样使用 CPU,我的旧 4 核运行利用率约为 60-70%,而许多其他东西也在运行(通常在标准发布中 > 90%,但差异很大)。似乎它基本上是一个一个地遍历解决方案中的每个项目,而不是并行化的。
标签: asp.net .net asp.net-core .net-core asp.net-core-3.1