私はカスタムのindexOf関数を使用して小さなプログラムを作成しましたが、システムのstring.IndexOf()メソッドを使用してそれを閉じたいと思っていました。私はリファクタリングを開始する前にindexOf()のパフォーマンスと同じことをする関数ループとの比較
は、しかし、私はちょうど私が観察し何
は事実だった私の機能は、システムstring.IndexOf()の比較において行動してどのように悪い見る見るために好奇心から小さなテストプログラムを書いたそのシステム列.IndexOf は、のように、配列を反復するよりも遅いです。
Processing random random string at 1000000 characters.
Processing method 1 system string.IndexOf
index 999999 took 620036 ticks
Processing method 2 custom IndexOf
index 999999 took 130007 ticks
私の質問は本当にです。 私は間違っているのですか?私はC#で書いたものよりもはるかに速いシステム機能はありませんか?
TL; DR 試験シナリオ
最初私は、いくつかのテストデータを設定し、いくつかのデータ
StringBuilder sb = new StringBuilder();
Random r = new Random();
string c = "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ";
long before;
long after;
for (int i = 0; i < 1000000; i ++) sb.Append(c[r.Next(c.Length)]);
とランダムな文字列を充填した後の終わりに何かを挿入します検索したいアレイ、最悪のケース
int j = sb.Length - 1 ;
sb[j] = '"';
方法1:システムstring.IndexOf
し、システムstring.IndexOf()
before = DateTime.Now.Ticks;
index = text.IndexOf("\"");
after = DateTime.Now.Ticks;
方法2によって使用されるどのように多くのダニチェック:
と後カスタムメソッドカスタムコードを実行するのは、静的な関数であり、whileループは文字配列を反復処理するというものです。
before = DateTime.Now.Ticks;
index = IndexOf(text, 0, '"', '/');
after = DateTime.Now.Ticks;
いずれにしても、ベンチマークとは異なります。 – delnan
まず、ベンチマークに 'Stopwatch'を使うべきです。これは' DateTime'よりも優れた解決策です。 – Oded
'IndexOf()'の実装はどのように見えますか? – Magnus