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");
}

ToString() 157

フォーマット 264

ToString() は一貫して高速に見えます。

編集: 私の PC では、1,000 万回の「フォーマット」操作に 2.2 秒しかかからなかったことを指摘しておく必要があります。これはマイクロ最適化に非常によく似ており、パフォーマンスが非常に重要な場合や反復的な場合を除き、あまり気にする必要はありません。

于 2012-05-01T15:46:40.497 に答える
4

文字列形式 - 内部で使用しますStringBuilder- これは文字列を扱うのにはるかに高速です。

ToString は、オブジェクトの既定の表現です。

于 2012-05-01T15:44:35.537 に答える
4

string.Formatparams引数セットを取ることができるため、他の複雑な文字列を作成するために使用できます。したがって、これは実際にはりんご 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 に答える