または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. JavaがC++よりも高速な場合(またはJITが高速でプリコンパイルされている場合)
- 3. C#高速ピクセルレンダリング
- 4. 高速かつエレガントな方法は、C#
- 5. C++の高速メディアフィルタ
- 6. ローカルメンバーがより高速またはインスタンスメンバー
- 7. どの方法が高速ですか?
- 8. Cで高速プロデューサ/スローコンシューマ
- 9. 高速CまたはObjective-C数学パーサーとは何ですか?
- 10. C/C++で高速ガウスフィッティングを行う方法は?
- 11. C#XNA高速ピクセルロード
- 12. Android SQLite:どのクエリ(「クエリ」または「rawQuery」)が高速ですか?
- 13. unordered_map:find()またはcount()のどちらが高速ですか?
- 14. どちらが高速で、key_cacheまたはOSキャッシュですか?
- 15. System.convert.ToStringは()私はC#で、小規模なプロジェクトに取り組んでいた
- 16. boost :: format form c-stringまたはstd :: string
- 17. PHP Domドキュメントのhtmlは高速ですか、preg_match_all関数が高速ですか?
- 18. PHP:JSONまたはXMLパーサーが高速ですか?
- 19. ポインタアクセスまたは参照アクセスが高速ですか?
- 20. C#でのジェネリックリストのフィルタリング:静的なデリゲート(述語)の方が高速ですか?
- 21. AVFoundationまたはMPMoviePlayerViewControllerの高速ビデオスキミングios
- 22. はこのjqueryが高速ですか?
- 23. C++でのMD5の高速実装
- 24. Windows/CでRedisを高速化する#
- 25. JavaまたはC#で高速MD5アルゴリズムを作成するには
- 26. C#POS高速レシート印刷
- 27. C#スレッドセーフな高速(est)カウンタ
- 28. コード実行時にC++がC++より高速なのはなぜですか?
- 29. 高速リダイレクト、PHPまたはhtaccess?
- 30. 高速スクリーンフォントOCRテクニックまたはAPI?
私はスピードの違いが非常に心配する価値はないと思うので、Convert.ToStringはちょうど内部的にキャストを行います。 –
@ Nathan - ただし、メソッド呼び出しの余分なオーバーヘッドがあります。一般的に操作はメソッドより高速ですが、私はこれがマイクロ最適化であることに完全に同意します。 – annakata
@annakataもちろん、それはマイクロ最適化の確かなケースです。 –