Boxen gegen ToString für intC#

Ein Treffpunkt für C#-Programmierer
Guest
 Boxen gegen ToString für int

Post by Guest »

Ich habe ein .net 6-Projekt und schreibe einige Protokolle. Das übliche Protokoll sieht so aus:

Code: Select all

int profileId = 100; //Any number
_logger.LogInformation("profileId = {ProfileId}", profileId);
Hier findet das Boxen statt (int -> object).
Also habe ich beschlossen, den Code zu ersetzen durch:

Code: Select all

int profileId = 100; //Any number
string profileIdString = profileId.ToString();
_logger.LogInformation("profileId = {ProfileId}", profileIdString);
Ich habe mich jedoch entschieden, den Benchmark durchzuführen und beide Optionen zu vergleichen.
Überraschenderweise sind die Ergebnisse nicht die, die ich erwartet hatte.
Hier ist der Code.

Code: Select all

[MemoryDiagnoser]
public class Benchmark
{
private const int N = 1000;

[Benchmark]
public void Boxing()
{
for (var i = 0; i < N; i++)
{
var s = string.Format("Test: {0}", i);
}
}

[Benchmark]
public void CastToString()
{
for (var i = 0; i < N; i++)
{
var s = string.Format("Test: {0}", i.ToString());
}
}
}

public class Program
{
public static void Main(string[] args)
{
var summary = BenchmarkRunner.Run(typeof(Program).Assembly);
}
}
Ausgabe:

Code: Select all

|       Method |     Mean |    Error |   StdDev |  Gen 0 | Allocated |
|------------- |---------:|---------:|---------:|-------:|----------:|
|       Boxing | 26.41 us | 0.236 us | 0.221 us | 4.8828 |     62 KB |
| CastToString | 32.91 us | 0.297 us | 0.278 us | 5.4626 |     70 KB |
Es sieht so aus, als ob der Box-Ansatz besser funktioniert: Er läuft schneller und reserviert weniger Speicher.
Meine Frage ist, warum passiert das? Bedeutet das, dass es in solchen Fällen besser ist, den Boxansatz zu verwenden? Oder habe ich den Leistungstest falsch geschrieben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post