Mak*_*ach 2 .net c# performance
我使用自定义indexOf函数编写了一个小程序,但想要将其解除,而不是系统string.IndexOf()方法.
但是在我开始重构之前,我出于好奇而编写了一个小测试程序,看看我的函数在系统字符串中的表现有多糟糕.IndexOf()
我观察到的是系统string.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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是真的; 我做错了吗? 系统功能不应该比我在c#中编写的任何其他功能快得多吗?
tl;博士 测试场景
首先,我设置了一些测试数据,用一些数据填充随机字符串
StringBuilder sb = new StringBuilder();
Random r = new Random();
string c = "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ0123456789";
long before;
long after;
for (int i = 0; i < 1000000; i ++) sb.Append(c[r.Next(c.Length)]);
Run Code Online (Sandbox Code Playgroud)
然后在我想要搜索的数组末尾插入一些东西,最糟糕的情况
int j = sb.Length - 1 ;
sb[j] = '"';
Run Code Online (Sandbox Code Playgroud)
方法1:系统string.IndexOf
然后检查系统字符串使用了多少个刻度.IndexOf()
before = DateTime.Now.Ticks;
index = text.IndexOf("\"");
after = DateTime.Now.Ticks;
Run Code Online (Sandbox Code Playgroud)
方法2:自定义方法
然后我运行我的自定义代码,这只是一个静态函数,while循环迭代字符数组.
before = DateTime.Now.Ticks;
index = IndexOf(text, 0, '"', '/');
after = DateTime.Now.Ticks;
Run Code Online (Sandbox Code Playgroud)
String.IndexOf还有一个接受charas参数的重载.试试这个吧.你自己的实现显然使用的char不是a string.
index = text.IndexOf('"');
Run Code Online (Sandbox Code Playgroud)
你应该多次重复测试.有时第一次运行需要更长时间,因为方法是jitted或者因为静态成员被初始化或类似的事情.
Test1();
Test2();
// start time
for (i = 0; i < 100; i++) {
Test1();
Test2();
}
// stop time
Run Code Online (Sandbox Code Playgroud)
我认为这里的区别在于,当你打电话给String.IndexOf你时,你正在使用字符串文字,而你的自定义函数正在使用字符文字.
没有看到你的自定义实现,我猜这个String.IndexOf方法更正确(locales,unicode,以及所有这些东西).
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |