16

任何人都可以解释以下任何一种方法是否有任何好处:

decimal d = 12.0m;

// 1. how I'd have done it
myLabel.Text = d.ToString();

// 2. how I saw someone do it today
myLabel.Text = String.Format("{0}", d);

只是为了澄清一下,我不是在询问这些方法的作用,我显然对此感到满意,只要在这个特定示例中,一个可能比另一个有性能优势。我知道 string.format() 提供的文化和格式的附加灵活性,但我总是只使用 'tostring()' 数字来将它们的值附加到标签或一般基于文本的属性。

对我来说, string.format() 选项似乎在这里输入更多,但没有额外的好处,但我想知道以一种方式与另一种方式做事是否还有其他“幕后”的好处。

4

5 回答 5

28

我在 Linqpad 做了一个小基准测试:

void Main()
{
    int iterations = 1000000;
    decimal d = 12.0m;
    var text = "";

    var sw = Stopwatch.StartNew();
    for (int i = 0; i < iterations; i++)
    {
        // 1. how I'd have done it
        text = d.ToString();
    }
    sw.Stop();
    sw.ElapsedMilliseconds.Dump("ToString()");

    sw = Stopwatch.StartNew();
    for (int i = 0; i < iterations; i++)
    {
        // 2. how I saw someone do it today
        text = String.Format("{0}", d);
    }
    sw.Stop();
    sw.ElapsedMilliseconds.Dump("Format");
}

第 157 章

格式 264

ToString() 看起来总是更快。

编辑:我应该指出,在我的 PC 上,1000 万次“格式化”操作只用了 2.2 秒。这看起来非常像微优化,除非您所做的事情对性能非常关键或迭代 - 它不会太担心这一点。

于 2012-05-01T15:46:40.497 回答
4

字符串格式 - 在引擎盖下使用StringBuilder- 处理字符串要快得多。

ToString 是对象的默认表示。

于 2012-05-01T15:44:35.537 回答
4

string.Format可用于创建其他复杂的字符串,因为它可以采用params参数集;所以这并不是一个真正的苹果VS苹果的问题。

于 2012-05-01T15:44:43.500 回答
3

ToString()更好,因为无论如何都Format()需要ToString()在引擎盖下调用。如果您需要指定自定义格式,请Format()提供格式说明符,如对齐/填充。否则,没有理由不使用ToString().

ToString()比 更适合自记录代码Format(),而且更有意义。

于 2012-05-01T15:44:29.803 回答
1

我希望调用会带来边际性能优势,ToString()因为它不必解析您的格式字符串。那,如果您不使用Format().

于 2012-05-01T15:46:15.617 回答