【发布时间】:2011-03-11 04:28:39
【问题描述】:
将对象转换为双精度对象的最快方法是什么?我现在在一段代码中,上面写着:
var d = double.TryParse(o.ToString(), out d); // o is the Object...
最初的想法是将其重写为
var d = Convert.ToDouble(o);
但这实际上会更快吗?
编辑:除了运行配置文件(顺便说一下,我向任何开发人员强烈推荐 JetBrains dotTrace),我还运行了 Reflector,这帮助我来了加上以下(或多或少是代码的相关部分):
if (o is IConvertible)
{
d = ((IConvertible)o).ToDouble(null);
}
else
{
d = 0d;
}
原代码double.TryParse()在140ms内执行。新代码在 34 毫秒内执行。我几乎可以肯定这是我应该采取的优化路径,但在我这样做之前,有没有人看到我的“优化”代码有任何问题?提前感谢您的反馈!
【问题讨论】:
-
o 实际上是双精度还是字符串?
-
是
o应该是双精度数还是可以转换为双精度数的对象(例如字符串或其他) -
可能很简单,但你不能使用演员表吗?
-
@Chris,o 通常为 double 或 null。非常非常罕见,它可能是一个真正的字符串,但我必须将这些情况排除在代码块之外。
-
@Michael,o 通常是 IConvertible,不知道是否有帮助。
标签: c# performance .net-3.5