.NET Core 5.0

待望の.NET Core 5.0のRC.1がついにリリースされました。

このバージョンから、ついにGAです。

そして、ついに。publishでの「圧縮ファイルを展開する」という望まない動作を脱却し、直接アセンブリを展開することができるようになりました。

長かったですね。

前回の記事から一年越しです。

 

ただし、今回も少しだけ制限事項があります。

Linux環境だとほとんど問題無いのですが、Windows環境だと、展開されるファイルが6ファイルほどあるのです。

デバッグが行えなくなるとの事で、仕方ないとは言え残念な点。

そこで、折衷案のようなビルドオプションが生えました。

 

IncludeNativeLibrariesInSingleFile

もとい、IncludeNativeLibrariesForSelfExtract

(最初どうにも適用されないなと思っていたら、githubのissueで、IncludeNativeLibrariesForSelfExtractに変えたとのこと)

実際に IncludeNativeLibrariesForSelfExtract を足せば、pdbファイルとexeファイルの2ファイルのみになりました。

まぁ、仕方ないか、という割り切りが必要そうです。

 

また、Trimのモードに、今まで通りのCopyUsedと、もっとアグレッシブにTrimするLinkが増えました。

両方比較しています。

で、今回もざっくりベンチマーク取ってみました。

テスト内容は前回の記事をご確認ください。

CopyUsedの結果

各計測結果

ビルド時間

ビルド時間オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし24745352
(216.3%)
2712
(109.6%)
9076
(366.8%)
PublishSingleFile2720
(-)
(109.9%)
5461
(216.3%)
(220.7%)
2960
(109.6%)
(119.6%)
9397
(366.8%)
(379.8%)

ファイル数

ファイル数オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし2257222572
PublishSingleFile6666

総ファイルサイズ

総ファイルサイズオプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし68,369,25026,378,212
(38.5%)
68,372,318
(100%)
28,475,364
(41.6%)
PublishSingleFile61,764,395
(-)
(90.3%)
19,764,941
(38.5%)
(28.9%)
61,767,471
(100%)
(90.3%)
21,862,101
(41.6%)
(31.9%)

初回実行時間

初回実行時間オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし587483
(82.2%)
646
(110%)
519
(88.4%)
PublishSingleFile2672
(-)
(455.1%)
3729
(82.2%)
(635.2%)
2202
(110%)
(375.1%)
1814
(88.4%)
(309%)

2回目実行時間

2回目実行時間オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし132137
(103.7%)
149
(112.8%)
151
(114.3%)
PublishSingleFile161
(-)
(121.9%)
171
(103.7%)
(129.5%)
218
(112.8%)
(165.1%)
138
(114.3%)
(104.5%)

2回目以降実行時間平均

2回目以降実行時間平均オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし144.75136.25
(94.4%)
172.75
(119.4%)
135.5
(93.7%)
PublishSingleFile163.5
(-)
(113.1%)
168.5
(94.4%)
(116.6%)
169
(119.4%)
(117.3%)
171.75
(93.7%)
(118.7%)

気づいた点

特筆すべきはPublishSingleFileをかけると、全体サイズが少し小さくなっていることでしょうか。

MS的にはPublishSingleFileで行きたいのでしょうか。

これからも注視していきたいですね。

各計測結果

ビルド時間

ビルド時間オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし36666717
(183.2%)
2709
(73.8%)
11889
(324.3%)
PublishSingleFile2780
(-)
(75.8%)
7007
(183.2%)
(191.1%)
3120
(73.8%)
(85.1%)
11426
(324.3%)
(311.6%)

ファイル数

ファイル数オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし2257022570
PublishSingleFile6666

総ファイルサイズ

総ファイルサイズオプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし68,369,25017,755,226
(25.9%)
68,372,318
(100%)
20,989,530
(30.7%)
PublishSingleFile61,764,395
(-)
(90.3%)
11,141,863
(25.9%)
(16.2%)
61,767,471
(100%)
(90.3%)
14,376,167
(30.7%)
(21%)

初回実行時間

初回実行時間オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし5501487
(270.3%)
540
(98.1%)
5559
(1010.7%)
PublishSingleFile2054
(-)
(373.4%)
1180
(270.3%)
(214.5%)
2088
(98.1%)
(379.6%)
1742
(1010.7%)
(316.7%)

2回目実行時間

2回目実行時間オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし173182
(105.2%)
147
(84.9%)
133
(76.8%)
PublishSingleFile126
(-)
(72.8%)
166
(105.2%)
(95.9%)
174
(84.9%)
(100.5%)
116
(76.8%)
(67%)

2回目以降実行時間平均

2回目以降実行時間平均オプションなしTrimmedReadyToRunTrimmed+ReadyToRun
オプションなし164.25178.5
(108.5%)
139.75
(84.7%)
123.25
(75%)
PublishSingleFile134.25
(-)
(81.7%)
165.75
(108.5%)
(100.6%)
148.75
(84.7%)
(90.2%)
120.5
(75%)
(73.1%)

こう見ると随分ファイルサイズ、頑張ってますね。

11MBであれば、結構いい線いくのでは無いでしょうか。

現状まだまだ実験的オプションな為、こちらはプロダクションで試すには相当テストと勇気が必要そうですけど。