メソッドを高速化しようとしています。今のところ、それはを取り、それをobject obj
次のようにdoubleに変換します:
double val = Convert.ToDouble(obj);
これをやったらもっと速くなるでしょうか?
double val = double.Parse(obj.ToString());
メソッドを高速化しようとしています。今のところ、それはを取り、それをobject obj
次のようにdoubleに変換します:
double val = Convert.ToDouble(obj);
これをやったらもっと速くなるでしょうか?
double val = double.Parse(obj.ToString());
Convert.ToDouble()
実際にはdouble.Parse()
通話をラップするため、速度の違いはごくわずかです。
のstring
Convert.ToDouble
値をチェックし、そうであればnull
戻り0.0
ます。それからそれは本当に呼び出しますdouble.Parse
:
[__DynamicallyInvokable]
public static double ToDouble(object value)
{
if (value != null)
return ((IConvertible) value).ToDouble((IFormatProvider) null);
else
return 0.0;
}
// common implementation of IConvertable
double IConvertible.ToDouble(IFormatProvider provider)
{
return Convert.ToDouble(this, provider);
}
// implementation for string
[__DynamicallyInvokable]
public static double ToDouble(string value, IFormatProvider provider)
{
if (value == null)
return 0.0;
else
return double.Parse(value, NumberStyles.Float | NumberStyles.AllowThousands, provider);
}
// and for long. differs, right?
[__DynamicallyInvokable]
public static double ToDouble(long value)
{
return (double) value;
}
double.Parse
ですから、数値以外のタイプの方がはるかに速いとは思いません。しかし、引数がそのタイプであることが本当にわからない場合は、のConvert.ToDouble(value)
代わりに呼び出す方がよいでしょうdouble.Parse(value.ToString())
。
理論的には、最初は1回の呼び出しです。2番目の例では、Parseメソッドを呼び出して、ToStringメソッドの結果を渡します。
そうは言っても、なぜもっと良い解決策があるのか(つまり、失敗した場合はどうなるのか)についてのコメントのいくつかを参照してください。