String.Format vs ToString()

Может ли кто-нибудь объяснить, есть ли какое-либо преимущество по одному из следующих способов:

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() кажется больше набирающим текст без дополнительной выгоды здесь, но я задавался вопросом, есть ли какие-либо другие преимущества "под капотом" от того, чтобы делать что-то одностороннее против другого.

Ответ 1

Я сделал небольшой тест в 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() выглядит последовательно быстрее.

EDIT: я должен отметить, что на моем ПК 10 миллионов операций "Формат" заняли всего 2,2 секунды. Это очень похоже на микро-оптимизацию, и если вы не делаете это крайне критично, или итеративно, это не слишком беспокоило бы об этом.

Ответ 2

string format - используется под капотом StringBuilder - это намного быстрее для работы со строками.

ToString - это представление объекта по умолчанию.

Ответ 3

string.Format может использоваться для создания других сложных строк, поскольку он может принимать набор аргументов params; так что это не вопрос о яблоках VS яблок.

Ответ 4

ToString() лучше, так как Format() нужно называть ToString() под капотом в любом случае. Если вам нужно указать произвольное форматирование, Format() предлагает спецификаторы форматирования, такие как выравнивание/добавление. В противном случае нет причин не использовать ToString().

ToString() лучше подходит для самодокументирующего кода, чем Format(), и имеет смысл.

Ответ 5

Я бы ожидал, что будет незначительное преимущество в производительности при вызове ToString(), поскольку он не должен анализировать вашу строку формата. Это, и это читается намного лучше, если вы не используете какие-либо функции функций Format().