问题
Can anyone explain if there is any benefit in either one of the following methods:
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);
Just to clarify, I'm not querying what the methods do, I'm obviously happy with that, just if there is perhaps a performance benefit in one over the other in this specific example. I'm aware of the added flexibility of cultures and formatting offered by string.format(), but I'd always just 'tostring()' numerics to attach their value to a label, or text based property in general.
To me, the string.format() option seems like more typing for no additional benefit here, but I wondered if there are any other 'under the hood' benefits of doing things one way vs the other.
回答1:
I did a little benchmark in 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
Format 264
ToString() looks consistently faster.
EDIT: I should point out, that on my PC 10 million "Format" operations only took 2.2 seconds. This looks very much like a micro-optimization, and unless what you're doing is extremely performance-critical, or iterative - it'd not worry about this too much.
回答2:
ToString()
is better, since Format()
needs to call ToString()
under the hood anyway. If you need to specify custom formatting, Format()
offers format specifiers like alignment/padding. Otherwise, there is no reason not to use ToString()
.
ToString()
fits much better into self-documenting code than Format()
, and just makes more sense.
回答3:
string format - uses under the hood- StringBuilder
- which is much faster for working with strings.
ToString is the default representation of an object.
回答4:
string.Format
can be used for creating other complex strings since it can take a params
argument set; so this isn't really a question of apples VS apples.
回答5:
I would expect there to be a marginal performance benefit of calling ToString()
since it doesn't have to parse your format string. That, and it reads much more nicely if you are not using any features of features of Format()
.
来源:https://stackoverflow.com/questions/10400142/string-format-vs-tostring