Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9551

[C#] BenchmarkDotNetをUbuntu18.04で動かそうとした時のメモ

$
0
0

Ubuntu18.04 on WSLでMonoのベンチマークを取ろうと試行錯誤した際のメモです。

環境

Monoのインストール

公式サイトに従って設定します。

sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo"deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update

そして、mono-completeをインストールします。

sudo apt install mono-complete

単にmonoコマンドを実行してエラーがなくても、アセンブリが不足する可能性があるので、mono-completeにします。
アセンブリが不足していると、例えば下記のようなエラーになります。

CS1069: The type name 'Console' could not be found in the namespace 'System'. This type has been forwarded to assembly 'System.Console, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Consider adding a reference to that assembly.

.NET Coreのインストール

今回は.NET Coreの結果を比較するために、.NET Core SDKをインストールしておきます。
もう覚えていませんが、公式サイト通りにやればできたはず。

ベンチマークコード

.csprojファイル

ターゲットフレームワークは<TargetFrameworks>のみで、<TargetFramework>は含めません。
Monoはnet48をサポートしていないという情報を見かけたので、net472にしました。

<TargetFrameworks>netcoreapp3.1;net472</TargetFrameworks>

Config

Configクラスに、Monoと比較用の.NET Core 3.1を追加します。

AddJob(Job.ShortRun.WithWarmupCount(1).WithIterationCount(1).WithRuntime(MonoRuntime.Default));AddJob(Job.ShortRun.WithWarmupCount(1).WithIterationCount(1).WithRuntime(CoreRuntime.Core31));

各ベンチマークコード

クラスに[DisassemblyDiagnoser]を付与しているのであれば、Monoはサポートしていないので外します。

こんなエラーになります。

DisassemblyDiagnoser supports only .NET Core 3.0+

ビルド

Windows側で行います。
これは単に私がMono環境下でのビルドの知見が無いためです。

実行

場所

面倒なので、Windowsでビルドした一式をWSL側にコピーします。(\\wsl$を使うのが良いでしょう)
プロジェクトファイルを/tmpに置いてはいけません。
こんなエラーになります。

Assembly BenchmarkVsReleasedVersion, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null is located in temp. If you are running benchmarks from xUnit you need to disable shadow copy. It's not supported by design.

Monoで実行

Windowsでの実行と同様に、一番クラシックな環境で実行するので、monoコマンドで実行します。

mono bin/Release/net472/Benchmark.exe

sudoで実行する必要があります。
普通に実行するとこんなエラーになります。

Failed to set up high priority. Make sure you have the right permissions. Message: Invalid data

以上でベンチマークが取れるようになりました。


Viewing all articles
Browse latest Browse all 9551

Trending Articles