【发布时间】:2016-08-25 17:29:19
【问题描述】:
我刚刚重构了一个现有的控制台应用程序以符合 .net core 1.0。
当我在 .net 4.5.2(即作为 exe)上编译和运行重构代码时,它会在 12 秒内运行。当我在 .net core 1 上运行相同的代码(即使用“dotnet”)时,它运行时间为 24.3 秒,是原来的两倍多。
这是预期的行为吗?如果没有,我可以检查哪些内容?
迈克尔
【问题讨论】:
-
你能说明你是
dotnet run myproject还是dotnet myproject.dll。第一个做了很多检查和按需编译,第二个只是执行一个 dll。结果大相径庭。 -
我使用的是“dotnet run..”我不知道还有其他选择。后来:我使用“dotnet publish”创建了应用程序及其支持库的文件夹,并通过“dotnet my_app.dll”执行。时机只好一点点。但是有一个可能的线索:当我执行“发布”时,它在 bin/Debug 之外创建了发布文件夹,这让我认为该应用程序可能因调试内容而臃肿(?)你可以在没有调试内容的情况下“发布”吗?这可能是考虑到我的缓慢?
-
我刚刚发现了“dotnet publish”的“-c release”选项。看起来,生成的应用程序比其中包含调试信息的应用程序快得多。事实上,它似乎与在 .net 框架库上作为可执行文件运行的相同代码的速度大致相同。
-
@MichaelRayLovett 仅供参考,这与“调试信息”无关,而与“调试模式”有关。在这种模式下,C# 编译器和 CLR JIT 编译器都会故意生成次优代码。
标签: performance .net-core