|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
replace_all vs new_replacer :))
|
|
Koka | Дата: Среда, 20.05.2009, 21:29:03 | Сообщение # 1 |
Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| как определить какой быстрее, который "оффициальный", либо самописный ? реплэйсер из string.inc Code stock replace_all(string[], len, const what[], const with[]) { new pos = 0; if ((pos = contain(string, what)) == -1) { return 0; } new total = 0; new with_len = strlen(with); new diff = strlen(what) - with_len; new total_len = strlen(string); new temp_pos = 0; while (replace(string[pos], len - pos, what, with) != 0) { /* jump to position after replacement */ pos += with_len; /* update cached length of string */ total_len -= diff; /* will the next call be operating on the last character? */ if (pos >= total_len) { break; } /* find the next position from our offset */ temp_pos = contain(string[pos], what); /* if it's invalid, we're done */ if (temp_pos == -1) { break; } /* otherwise, reposition and update counters */ pos += temp_pos; total++; } return total; } новый Code stock new_replacer(string[], len, what[], with[]) { static withlen, charnum = 0 withlen = strlen(with) while(replace(string[charnum], len, what, with) != 0) { charnum += contain(string[charnum], with) + withlen } } работают вроде одинаково, кроме ретурна кол-ва замененых элементов, что поправимо.
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
Сообщение отредактировал Koka - Четверг, 21.05.2009, 00:13:38 |
|
| |
PomanoB | Дата: Среда, 20.05.2009, 22:16:49 | Сообщение # 2 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| поставь в цикл раз эдак 1000 и засеки время tickcount'ом
http://romanov4400.mybrute.com
|
|
| |
Koka | Дата: Четверг, 21.05.2009, 00:18:08 | Сообщение # 3 |
Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| так и сделал, цикл в 1000000000 раз показал что new_replacer быстрее не на много (в 1.01785) хотя различие в 6953 tick'ов Code check times=1000000000 null_cycle=28234 variant_odin=396422 variant_dva=389469 ---result--- null cycle=28234 #1=396422, #2=389469 variant 2 bistree v 1.01785 raz(a) если исходник нужен, могу скинуть
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
Сообщение отредактировал Koka - Четверг, 21.05.2009, 01:01:50 |
|
| |
PomanoB | Дата: Четверг, 21.05.2009, 15:34:07 | Сообщение # 4 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Давай, будет интересно посмотреть )
http://romanov4400.mybrute.com
|
|
| |
Koka | Дата: Четверг, 21.05.2009, 17:58:18 | Сообщение # 5 |
Полковник
Группа: Пользователи
Сообщений: 169
Статус: Не в сети
| Code #include <amxmodx>
public plugin_init() { register_plugin("Test Cycle", "1.0", "Koka") register_concmd("check", "check") }
public check() { new TIMES = 1000000000 new i, null_cycle, variant_odin, variant_dva server_print("times=%d", TIMES) null_cycle = tickcount() for(i=0;i<TIMES;i++) {} null_cycle = tickcount() - null_cycle server_print("null_cycle=%d", null_cycle) variant_odin = tickcount() for(i=0;i<TIMES;i++) { static msg[] = "zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg" replace_all(msg, sizeof msg -1, "zomg ", "ololo") } variant_odin = tickcount() - variant_odin - null_cycle server_print("variant_odin=%d", variant_odin) variant_dva = tickcount() for(i=0;i<TIMES;i++) { static msg[] = "zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg zomg" new_replacer(msg, sizeof msg -1, "zomg ", "ololo") } variant_dva = tickcount() - variant_dva - null_cycle server_print("variant_dva=%d", variant_dva) server_print("---result---") server_print("null cycle=%d", null_cycle) server_print("#1=%d, #2=%d", variant_odin, variant_dva) server_print("%s bistree", (variant_odin < variant_dva) ? "variant 1" : "variant 2") server_print("v %.5f raz(a)", variant_dva < variant_odin ? float(variant_odin) / float(variant_dva) : float(variant_dva) / float(variant_odin)) return 1 }
stock new_replacer(string[], len, what[], with[]) { static withlen, charnum = 0 withlen = strlen(with) while(replace(string[charnum], len, what, with) != 0) { charnum += contain(string[charnum], with) + withlen } }
стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
Сообщение отредактировал Koka - Четверг, 21.05.2009, 18:01:07 |
|
| |
| AMX Mod X Russian Community © 2006-2024 | |
|
| |