cod*_*ife 17 c# performance .net-3.5
将对象转换为double的最快方法是什么?我现在正处于一段代码中,其中包括:
var d = double.TryParse(o.ToString(), out d); // o is the Object...
Run Code Online (Sandbox Code Playgroud)
首先想到的是将其重写为
var d = Convert.ToDouble(o);
Run Code Online (Sandbox Code Playgroud)
但实际上会更快吗?
编辑: 除了运行配置文件(顺便说一下,我强烈建议任何开发人员使用JetBrains dotTrace),我运行了Reflector,这帮助我提出了以下内容(或多或少相关的代码部分):
if (o is IConvertible)
{
d = ((IConvertible)o).ToDouble(null);
}
else
{
d = 0d;
}
Run Code Online (Sandbox Code Playgroud)
原始代码double.TryParse()
在140ms内执行.新代码在34ms内执行.我几乎可以肯定这是我应该采取的优化路径,但在我这样做之前,有没有人看到我的"优化"代码出现问题?在此先感谢您的反馈!
Flo*_*ory 19
你必须做很多这些,以便有任何意义,花时间在这上面.但是,我不是来判断:
所以,你的代码是这样的:
if (o is IConvertible)
{
d = ((IConvertible)o).ToDouble(null);
}
else
{
d = 0d;
}
Run Code Online (Sandbox Code Playgroud)
我想知道你是否会更好
IConvertible convert = o as IConvertible;
if (convert != null)
{
d = convert.ToDouble(null);
}
else
{
d = 0d;
}
Run Code Online (Sandbox Code Playgroud)
为您节省双重演员.
Bri*_*eon 10
我尝试了以下方法.
我使用了以下代码.
public static void Main()
{
string text = "3.14";
var timer = new Stopwatch();
timer.Start();
for (int i = 0; i < 10000000; i++)
{
double d;
d = Convert.ToDouble(text);
//double.TryParse(text, out d);
//d = double.Parse(text);
}
timer.Stop();
Console.WriteLine("Time=" + timer.Elapsed.ToString());
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上,我看到了这些结果.我平均进行了3次不同的跑步.
当然,我使用了可转换的字符串.如果字符串不可转换,那么我高度怀疑是远远double.TryParse
的最快.