Home » Sciences et technologies » Nouveau dans .NET 8.0 [13]: Performance de FrozenSet

Nouveau dans .NET 8.0 [13]: Performance de FrozenSet

by Nouvelles
Nouveau dans .NET 8.0 [13]: Performance de FrozenSet

2024-03-08 14:31:00

Dans la partie précédente de cette série, j’ai la classe FrozenSet dans l’espace de noms System.Collections.Frozen introduit, ce qui est nouveau dans .NET 8.0. La question se pose de savoir pourquoi Microsoft FrozentSet également introduit. La réponse à cette question est – comme bien souvent – ​​la performance.

Publicité


Dr. Holger Schwichtenberg est le directeur technique du réseau d’experts www.IT-Visions.de qui, avec 53 experts renommés, soutient de nombreuses moyennes et grandes entreprises par le biais de conseils et de formations ainsi que de développement de logiciels. Grâce à ses participations à de nombreuses conférences nationales et internationales ainsi qu’à plus de 90 ouvrages spécialisés et plus de 1 500 articles spécialisés, Holger Schwichtenberg est l’un des experts les plus connus en Allemagne dans le domaine des technologies .NET et Web.

Cette fois, j’évaluerai la vitesse sur la base d’un exemple d’application typique.

Étant donné un ensemble non trié de nombres compris entre 1 et 10 000. À quelle vitesse pouvez-vous trouver un seul numéro dans l’ensemble ?

La bibliothèque est utilisée pour mesurer les performances BenchmarkDotNet de Microsoft pour utilisation.

using System.Collections.Frozen;
using System.Collections.Immutable;
using System.Collections.ObjectModel;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Toolchains.InProcess.NoEmit;
 
namespace NET8_Console.Collections_Benchmark;
 
public class AntiVirusFriendlyConfig : ManualConfig
{
 public AntiVirusFriendlyConfig()
 {
  AddJob(Job.MediumRun
      .WithToolchain(InProcessNoEmitToolchain.Instance));
 }
}
 
[Config(typeof(AntiVirusFriendlyConfig))]
public class Collections_Contains_Benchmark
{
 private const int Iterations = 1000;
 private readonly List list;
 private readonly ReadOnlyCollection roCollection;
 private readonly FrozenSet frozenSet;
 private readonly HashSet hashSet;
 private readonly ImmutableList immutableList;
 private readonly ImmutableHashSet immutableHashSet;
 
 public Collections_Contains_Benchmark()
 {
  var array = Enumerable.Range(1, 10000).ToArray();
  Random.Shared.Shuffle(array);
  list = array.ToList();
  // liefert ReadOnlyCollection:
  roCollection = list.AsReadOnly(); 
  frozenSet = list.ToFrozenSet();
  hashSet = list.ToHashSet();
  immutableList = list.ToImmutableList();
  immutableHashSet = list.ToImmutableHashSet();
 }
 
 [Benchmark(Baseline = true)]
 public void ListContains()
 {
  for (var i = 0; i < Iterations; i++)
  {
   var b = list.Contains(i);
  }
 }
 
 [Benchmark]
 public void ReadOnlyCollectionContains()
 {
  for (var i = 0; i < Iterations; i++)
  {
   var b = roCollection.Contains(i);
  }
 }
 
 [Benchmark]
 public void FrozenSetContains()
 {
  for (var i = 0; i < Iterations; i++)
  {
   var b = frozenSet.Contains(i);
  }
 }
 
 [Benchmark]
 public void HashSetContains()
 {
  for (var i = 0; i < Iterations; i++)
  {
   var b = hashSet.Contains(i);
  }
 }
 
 [Benchmark]
 public void ImmutableListContains()
 {
  for (var i = 0; i < Iterations; i++)
  {
   var b = immutableList.Contains(i);
  }
 }
 
 [Benchmark]
 public void ImmutableHashSetContains()
 {
  for (var i = 0; i < Iterations; i++)
  {
   var b = immutableHashSet.Contains(i);
  }
 }
}

Le benchmark illustré dans la figure suivante appelle la méthode 1 000 fois Contains() sur une liste non triée de 10 000 numéros. La quantité du type FrozenSet gagne lorsqu'il est vu 1000 fois Contains() par rapport à d’autres ensembles d’objets.



Figure : Un ensemble de type FrozenSet offre des performances nettement supérieures lors de l'appel de Contains() 1 000 fois.

(Image : Capture d'écran (Holger Schwichtenberg))


(moi)

Vers la page d'accueil



#Nouveau #dans #.NET #Performance #FrozenSet
1709986297

You may also like

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.