またはobjThatIsString.ToString()それはaswersで指摘されたよう.. より速くない賢明..C#の方が高速です - System.Convert.ToString(objThatIsString)または(string)objThatIsString?
答えて
後に直接キャストは実行時の型チェックを除いてすべてのチェックを行う必要はありません - 私はキャストが迅速であることを期待します。
また、objThatIsString.ToString()
を考慮する必要があります。 (string
の場合)これはちょうどreturn this;
であるため、速くなければなりません - 確かにConvert.ToString
より速いでしょう。レースはランタイム型チェックと仮想呼び出しの間にあります。実際には、どちらも非常に迅速です。
あなたの期待は以下のテスト結果と一致します! – thijs
キャスト(string)obj
が速くなければなりません。 Convertクラスは、実際には異なるクラスのオブジェクトを変換し、この場合は遅くなります。
私は(string) objThatIsString
が速いと思います。これは、コンパイラがこの変換をコンパイル時に行うことができるためです。
しかし、ジェフ・アトウッドが重要ではないと考えているすべての(Coding Horror: The Sad Tragedy of Micro-Optimization Theater)
コンパイラは、*変数*が文字列であるとわかっている場合にのみ入ります。それ以外の場合は、ランタイム・タイプ・チェックが発行されます。 –
キャストが高速です。
Convert.ToString
は最終的にオーバーヘッドの後にキャストします。実際にはIConvertible
にキャストしようとした後、仮想メソッドToString
を呼び出します。したがって、実際のキャストをString
にする仮想呼び出しです。
「数字がその話を伝えます」という言葉があります。つまり、何かを仮定するのではなく、それを測定することもできます!
テストアプリをまとめてテストを実行し、結果を検証してください。
真の質問は次のようになります。 どのように高速化されているかを測定するにはどうすればよいですか?
@thijs:中
public class ToStringTest
{
private object mString = "hello world!";
Stopwatch sw = new Stopwatch();
private List<long> ConvertToStringTimes = new List<long>();
private List<long> ToStringTimes = new List<long>();
private List<long> CastToStringTimes = new List<long>();
public ToStringTest()
{
for (int i = 0; i < 100000; i++)
{
sw.Start();
ConvertToString();
sw.Stop();
ConvertToStringTimes.Add(sw.ElapsedTicks);
sw.Reset();
sw.Start();
ToString();
sw.Stop();
ToStringTimes.Add(sw.ElapsedTicks);
sw.Reset();
sw.Start();
CastToString();
sw.Stop();
CastToStringTimes.Add(sw.ElapsedTicks);
sw.Reset();
}
Console.WriteLine("Average elapsed ticks after converting {0} strings",ConvertToStringTimes.Count);
Console.WriteLine("ConvertToString: {0} ticks", ConvertToStringTimes.Average());
Console.WriteLine("ToString: {0} ticks", ToStringTimes.Average());
Console.WriteLine("CastToString: {0} ticks", CastToStringTimes.Average());
}
private string ConvertToString()
{
return Convert.ToString(mString);
}
public override string ToString()
{
return mString.ToString();
}
public string CastToString()
{
return (string) mString;
}
}
結果::
100000の文字列ConvertToStringを変換した後
平均経過ティック:586.51461ティック:611.97372は
ToStringメソッドダニここ は、簡単なテストです
CastToString:582.25266 ticks
- 1. 「hash( 'md5'、 'string')」が「md5( 'string')」よりも高速なのはなぜですか?
- 2. スタティックローカルvsローカル。どちらがCまたはC++で高速ですか?
- 3. ionic2またはnativescriptの方が高速ですか?
- 4. JavaがC++よりも高速な場合(またはJITが高速でプリコンパイルされている場合)
- 5. C#高速ピクセルレンダリング
- 6. 高速かつエレガントな方法は、C#
- 7. C++での高速バッファリング
- 8. C++の高速メディアフィルタ
- 9. C++の高速化アルゴリズム
- 10. System.convert.ToStringは()私はC#で、小規模なプロジェクトに取り組んでいた
- 11. std :: stringをソートするとC++ 11のstd :: sort()が高速にならないのはなぜですか?
- 12. 高速CまたはObjective-C数学パーサーとは何ですか?
- 13. C/C++で高速ガウスフィッティングを行う方法は?
- 14. Cで高速プロデューサ/スローコンシューマ
- 15. ローカルメンバーがより高速またはインスタンスメンバー
- 16. どの方法が高速ですか?
- 17. C#XNA高速ピクセルロード
- 18. apcu_fetch()は、接頭辞または接尾辞の方が高速ですか?
- 19. ArcSinの高速実装または近似C#
- 20. C++で行列乗算の高速コードを書く方法は?
- 21. Android SQLite:どのクエリ(「クエリ」または「rawQuery」)が高速ですか?
- 22. unordered_map:find()またはcount()のどちらが高速ですか?
- 23. boost :: format form c-stringまたはstd :: string
- 24. どちらが高速で、key_cacheまたはOSキャッシュですか?
- 25. C++ STLコンテナのパフォーマンス。構造体の高速化または構造体なしの高速化
- 26. C++でのMD5の高速実装
- 27. Windows/CでRedisを高速化する#
- 28. VBA(Excel)でデータを高速化する高速方法
- 29. PHP Domドキュメントのhtmlは高速ですか、preg_match_all関数が高速ですか?
- 30. C#でのジェネリックリストのフィルタリング:静的なデリゲート(述語)の方が高速ですか?
私はスピードの違いが非常に心配する価値はないと思うので、Convert.ToStringはちょうど内部的にキャストを行います。 –
@ Nathan - ただし、メソッド呼び出しの余分なオーバーヘッドがあります。一般的に操作はメソッドより高速ですが、私はこれがマイクロ最適化であることに完全に同意します。 – annakata
@annakataもちろん、それはマイクロ最適化の確かなケースです。 –