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()
.