我用一个自定义的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