Remove obsolete API usage in articles (#2667)

* Remove obsolete API usage in articles

* Apply suggestions from code review

Co-authored-by: Tim Cassell <35501420+timcassell@users.noreply.github.com>

---------

Co-authored-by: Keegan Caruso <keegancaruso@microsoft.com>
Co-authored-by: Tim Cassell <35501420+timcassell@users.noreply.github.com>
This commit is contained in:
Keegan 2024-11-15 14:21:34 -08:00 коммит произвёл GitHub
Родитель 25308bfc1d
Коммит c7ed714a34
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 29 добавлений и 28 удалений

Просмотреть файл

@ -59,11 +59,11 @@ private class Config : ManualConfig
{
public Config()
{
Add(MemoryDiagnoser.Default);
Add(new InliningDiagnoser());
Add(new EtwProfiler());
Add(ThreadingDiagnoser.Default);
Add(ExceptionDiagnoser.Default);
AddDiagnoser(MemoryDiagnoser.Default);
AddDiagnoser(new InliningDiagnoser());
AddDiagnoser(new EtwProfiler());
AddDiagnoser(ThreadingDiagnoser.Default);
AddDiagnoser(ExceptionDiagnoser.Default);
}
}
```

Просмотреть файл

@ -98,20 +98,20 @@ public class MyBenchmarks
{
public Config()
{
Add(
new Job("MySuperJob", RunMode.Dry, EnvMode.RyuJitX64)
AddJob(
new Job("MySuperJob", RunMode.Dry, EnvironmentMode.RyuJitX64)
{
Env = { Runtime = Runtime.Core },
Environment = { Runtime = CoreRuntime.Core90 },
Run = { LaunchCount = 5, IterationTime = TimeInterval.Millisecond * 200 },
Accuracy = { MaxStdErrRelative = 0.01 }
Accuracy = { MaxRelativeError = 0.01 }
});
// The same, using the .With() factory methods:
Add(
AddJob(
Job.Dry
.WithPlatform(Platform.X64)
.WithJit(Jit.RyuJit)
.WithRuntime(Runtime.Core)
.WithRuntime(CoreRuntime.Core90)
.WithLaunchCount(5)
.WithIterationTime(TimeInterval.Millisecond * 200)
.WithMaxRelativeError(0.01)
@ -122,26 +122,26 @@ public class MyBenchmarks
}
```
Basically, it's a good idea to start with predefined values (e.g. `EnvMode.RyuJitX64` and `RunMode.Dry` passed as constructor args) and modify rest of the properties using property setters or with help of object initializer syntax.
Basically, it's a good idea to start with predefined values (e.g. `EnvironmentMode.RyuJitX64` and `RunMode.Dry` passed as constructor args) and modify rest of the properties using property setters or with help of object initializer syntax.
Note that the job cannot be modified after it's added into config. Trying to set a value on property of the frozen job will throw an `InvalidOperationException`. Use the `Job.Frozen` property to determine if the code properties can be altered.
If you do want to create a new job based on frozen one (all predefined job values are frozen) you can use the `.With()` extension method
```cs
var newJob = Job.Dry.With(Platform.X64);
var newJob = Job.Dry.WithPlatform(Platform.X64);
```
or pass the frozen value as a constructor argument
```c#
var newJob = new Job(Job.Dry) { Env = { Platform = Platform.X64 } };
var newJob = new Job(Job.Dry) { Environment = { Platform = Platform.X64 } };
```
or use the `.Apply()` method on unfrozen job
```c#
var newJob = new Job() { Env = { Platform = Platform.X64 } }.Apply(Job.Dry);
var newJob = new Job() { Environment = { Platform = Platform.X64 } }.Apply(Job.Dry);
```
in any case the Id property will not be transfered and you must pass it explicitly (using the .ctor id argument or the `.WithId()` extension method).
@ -152,7 +152,9 @@ You can also add new jobs via attributes. Examples:
```cs
[DryJob]
[ClrJob, CoreJob, MonoJob]
[MonoJob]
[SimpleJob(RuntimeMoniker.Net90)]
[SimpleJob(RuntimeMoniker.NetCoreApp31)]
[LegacyJitX86Job, LegacyJitX64Job, RyuJitX64Job]
[SimpleJob(RunStrategy.ColdStart, launchCount: 1, warmupCount: 5, iterationCount: 5, id: "FastAndDirtyJob")]
public class MyBenchmarkClass
@ -212,7 +214,7 @@ public class MySuperJobAttribute : Attribute, IConfigSource
{
var job = new Job("MySuperJob", RunMode.Core);
job.Env.Platform = Platform.X64;
Config = ManualConfig.CreateEmpty().With(job);
Config = ManualConfig.CreateEmpty().AddJob(job);
}
public IConfig Config { get; }

Просмотреть файл

@ -87,10 +87,9 @@ namespace BenchmarkDotNet.Samples
static void Main(string[] args)
{
var config = DefaultConfig.Instance
.With(Job.Default.With(CoreRuntime.Core21))
.With(Job.Default.With(CoreRuntime.Core30))
.With(Job.Default.With(ClrRuntime.Net48))
.With(Job.Default.With(MonoRuntime.Default));
.AddJob(Job.Default.WithRuntime(CoreRuntime.Core80))
.AddJob(Job.Default.WithRuntime(ClrRuntime.Net48))
.AddJob(Job.Default.WithRuntime(MonoRuntime.Default));
BenchmarkSwitcher
.FromAssembly(typeof(Program).Assembly)
@ -130,8 +129,8 @@ It's possible to benchmark a private build of .NET Runtime. All you need to do i
BenchmarkSwitcher
.FromAssembly(typeof(Program).Assembly)
.Run(args,
DefaultConfig.Instance.With(
Job.ShortRun.With(ClrRuntime.CreateForLocalFullNetFrameworkBuild(version: "4.0"))));
DefaultConfig.Instance.AddJob(
Job.ShortRun.WithRuntime(ClrRuntime.CreateForLocalFullNetFrameworkBuild(version: "4.0"))));
```
This sends the provided version as a `COMPLUS_Version` env var to the benchmarked process.
@ -208,7 +207,7 @@ or:
```cs
var config = DefaultConfig.Instance
.With(Job.Default.With(NativeAotRuntime.Net70)); // compiles the benchmarks as net7.0 and uses the latest NativeAOT to build a native app
.AddJob(Job.Default.WithRuntime(NativeAotRuntime.Net70)); // compiles the benchmarks as net7.0 and uses the latest NativeAOT to build a native app
BenchmarkSwitcher
.FromAssembly(typeof(Program).Assembly)
@ -231,8 +230,8 @@ If you want to benchmark some particular version of NativeAOT (or from a differe
```cs
var config = DefaultConfig.Instance
.With(Job.ShortRun
.With(NativeAotToolchain.CreateBuilder()
.AddJob(Job.ShortRun
.WithToolchain(NativeAotToolchain.CreateBuilder()
.UseNuGet(
microsoftDotNetILCompilerVersion: "7.0.0-*", // the version goes here
nuGetFeedUrl: "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json") // this address might change over time
@ -338,8 +337,8 @@ or explicitly in the code:
```cs
var config = DefaultConfig.Instance
.With(Job.ShortRun
.With(NativeAotToolchain.CreateBuilder()
.AddJob(Job.ShortRun
.WithToolchain(NativeAotToolchain.CreateBuilder()
.UseLocalBuild(@"C:\Projects\runtime\artifacts\packages\Release\Shipping\")
.DisplayName("NativeAOT local build")
.TargetFrameworkMoniker("net7.0")