gpt4 book ai didi

c# - indexOf() 的性能与函数循环做同样的事情

转载 作者:行者123 更新时间:2023-11-30 19:06:47 27 4
gpt4 key购买 nike

我使用自定义 indexOf 函数编写了一个小程序,但想放弃它以支持系统 string.IndexOf() 方法。

但在我开始重构之前,我出于好奇写了一个小测试程序,看看我的函数与系统 string.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

所以我的问题是真的; 我做错了吗? 系统运行速度不应该比我用 c# 编写的任何其他东西快得多吗?

长话短说测试场景

首先我设置了一些测试数据,用一些数据填充了一个随机字符串

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)]);

然后在我想搜索的数组末尾插入一些东西,最坏的情况

int j = sb.Length - 1 ;                                   
sb[j] = '"';

方法一:系统string.IndexOf

然后检查系统 string.IndexOf() 使用了多少个刻度

before = DateTime.Now.Ticks;
index = text.IndexOf("\"");
after = DateTime.Now.Ticks;

方法二:自定义方法

然后我运行我的自定义代码,它只是一个静态函数,带有一个 while 循环迭代一个字符数组。

before = DateTime.Now.Ticks; 
index = IndexOf(text, 0, '"', '/');
after = DateTime.Now.Ticks;

最佳答案

String.IndexOf 也有一个接受 char 作为参数的重载。试试这个。您自己的实现显然使用了 char 而不是 string

index = text.IndexOf('"'); 

您应该重复测试几次。有时第一次运行需要更长的时间,因为方法是 jitted 或因为静态成员被初始化或类似的事情。

Test1();
Test2();
// start time
for (i = 0; i < 100; i++) {
Test1();
Test2();
}
// stop time

关于c# - indexOf() 的性能与函数循环做同样的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8885864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com