【发布时间】:2013-11-19 19:45:29
【问题描述】:
我在字符串和整数之间做了很多比较,想知道两者中哪一个提供更好的性能。
这个:
int a = 1;
string b = "1";
bool isEqual = a == int.Parse(b);
或者这个:
int a = 1;
string b = "1";
bool isEqual = a.ToString() == b;
编辑:在 Elliott Frisch 发表评论后,我编写了以下代码进行基准测试,我从中得到:https://stackoverflow.com/a/15108875/629211。接受的答案也有效。
int a = 1;
string b = "1";
Stopwatch watch1 = new Stopwatch();
watch1.Start();
for (int i = 1; i < 1000000; i++)
{
bool isEqual = a == int.Parse(b);
}
watch1.Stop();
Stopwatch watch2 = new Stopwatch();
watch2.Start();
for (int i = 1; i < 1000000; i++)
{
bool isEqual = a.ToString() == b;
}
watch2.Stop();
Console.WriteLine("Option 1: {0} ms", watch1.Elapsed);
Console.WriteLine("Option 2: {0} ms", watch2.Elapsed);
顺便说一句,答案是第二种选择。
【问题讨论】:
-
您是否执行过任何基准测试?
-
作为一个猜测:我会选择第二个,因为它不会失败。 int.Parse 可能会失败并引发异常。当然,您可以使用 tryparse,但开销可能会影响性能。
-
我确信您的代码中存在比这个特定场景更大的瓶颈。
-
选项 2 的执行速度比第一个快。
-
解析通常比打印更难。但如果你做了很多,(a)为什么,(b)它是否甚至是瓶颈,以及(c)衡量。