-6

Could someone expand the spectrum of the samples of boxing and performance in .NET?

This sample is clear for me, but are there other cases?

Code optimization flow

BAD CODE

void CountVer1(int max)
{
    for (int i = 1; i <= max; i++)
    {
        Console.WriteLine("{0} out of {1}",
            i, max);
    }
}

GOOD CODE

void CountVer2(int max)
{
    object maxObj = max;
    for (int i = 1; i <= max; i++)
    {
        Console.WriteLine("{0} out of {1}",
            i, maxObj);
    }
}

IDEAL CODE

void CountVer3(int max)
{
    for (int i = 1; i <= max; i++)
    {
        Console.WriteLine("{0} out of {1}",
            i.ToString(), max.ToString());
    }
}
4

1 回答 1

2

装箱被认为很慢,因为它意味着对象的分配。在您的情况下,该对象是短暂的(可能无法在 Gen0 中存活),这使得它很便宜。我最近做了一个微基准测试,将生成一个短寿命对象的成本放在大约 15 个 CPU 周期。在实际应用中成本可能会高一些,但拳击并不那么昂贵。

您应该避免在性能关键代码中进行分配。但这意味着每秒调用超过 1000 万次的代码。

如果您对上面的代码进行基准测试,您会发现这Console.WriteLine是昂贵的部分,优化这两个框的影响可以忽略不计。

在优化程序的性能时,我会:

  1. 配置文件以识别瓶颈。但是 99% 的代码性能不是问题
  2. 将其重写为您希望更好的版本
  3. 再次对其进行分析,并验证性能改进是否显着。如果不是,请恢复为更简单的代码,或尝试其他变体。
于 2013-04-11T14:32:06.560 回答