我用一個自定義的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;博士 測試場景
第一我建立一些測試數據,並填充在隨機字符串與一些數據
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:定製方法
和後我運行我的自定義代碼,它只是一個靜態函數,帶有一個遍歷字符數組的循環。
before = DateTime.Now.Ticks;
index = IndexOf(text, 0, '"', '/');
after = DateTime.Now.Ticks;
無論如何,這不是一個基準。 – delnan 2012-01-16 20:30:54
首先,你應該使用'Stopwatch'作爲基準測試 - 它的分辨率比'DateTime'更好。 – Oded 2012-01-16 20:31:47
你如何實現'IndexOf()'看起來? – Magnus 2012-01-16 20:39:44