Бокс против ToString для intC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Бокс против ToString для int

Сообщение Anonymous »

У меня есть проект .net 6, и я пишу несколько журналов. Обычный лог выглядит:

Код: Выделить всё

int profileId = 100; //Any number
_logger.LogInformation("profileId = {ProfileId}", profileId);
Здесь происходит бокс (int -> object).
Итак, я решил заменить код на:

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»