Я написал небольшую программу с использованием пользовательской функции indexOf, но хотел отклонить ее в пользу системного метода string.IndexOf ().
Но прежде чем начать рефакторинг, я из любопытства написал небольшую тестовую программу, чтобы посмотреть, насколько плохо работает моя функция по сравнению с системной строкой. 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 #?
ТЛ; др
тестовый сценарий
сначала я настроил некоторые тестовые данные, заполнив случайную строку некоторыми данными
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] = '"';
метод 1: системная строка.IndexOf
и затем проверьте, сколько тиков используется системной строкой. 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;