Код: Выделить всё
int profileId = 100; //Any number
_logger.LogInformation("profileId = {ProfileId}", profileId);
Итак, я решил заменить код на:
Код: Выделить всё
int profileId = 100; //Any number
string profileIdString = profileId.ToString();
_logger.LogInformation("profileId = {ProfileId}", profileIdString);
Удивительно, но результаты оказались не такими, как я ожидал.
Вот код.
p>
Код: Выделить всё
[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);
}
}
Код: Выделить всё
| 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 |
Мой вопрос: почему это происходит? Означает ли это, что в подобных случаях лучше использовать боксерский подход? Или я неправильно написал тест производительности?
Подробнее здесь: https://stackoverflow.com/questions/716 ... ng-for-int