01.04.2010, 02:36
Кто-нибудь проверял скорость создания/правки property? И есть ли лимиты по длине строковых значений / массивов ?
Подумываю перевести новый INI inc на динамические переменные.
Создал вот такой ФС для проверки скоростей копирования строк и правки/создания property. До 1000 слотов строковых property создаются/меняются за приемлемое время, в районе 3-4 мсек (на моем компе). После 1000 слотов время правки/создания увеличивается в прогрессии. Т.е. при 10 тыщ слотах правка/чтение/создание выполняется за примерно одинаковые 3500 мсек (3,5 сек) ^^
- Копирование строк стандартными функциями strmid/memcpy выполняется примерно за 1 мсек при 1000 итераций,
и за 4 мсек при 10 тыщ итерациях.
- Самописная Pawn функция по копированию строк при 1000 итерациях выполняется за 23 мсек,
а при 1000 итерациях за 111 мсек.
Подумываю перевести новый INI inc на динамические переменные.
Создал вот такой ФС для проверки скоростей копирования строк и правки/создания property. До 1000 слотов строковых property создаются/меняются за приемлемое время, в районе 3-4 мсек (на моем компе). После 1000 слотов время правки/создания увеличивается в прогрессии. Т.е. при 10 тыщ слотах правка/чтение/создание выполняется за примерно одинаковые 3500 мсек (3,5 сек) ^^
Code:
#include <a_samp> #define MAX_COUNT 1000 #define TEST_STR "012345678901234567890123456789" #define NEW_TEST_STR "0000000000000000000000000000000" stock strcopy ( dest[], source[], maxsize = sizeof(dest) ) { new p; for ( ; source[p] != 0 && p < maxsize; p++ ) dest[p] = source[p]; dest[ min( p, maxsize - 1 ) ] = 0; } public OnFilterScriptInit() { new str[32], time, i; print("\n"); print( "string functions test (" #MAX_COUNT " iterations)" ); print( " 1. copy" ); time = GetTickCount(); for ( i = 0, str[0] = 0; i < MAX_COUNT; i++ ) strmid( str, TEST_STR, 0, 30 ); time = GetTickCount() - time; printf( " * strmid: %d msec, str(%d) = `%s`", time, strlen(str), str ); time = GetTickCount(); for ( i = 0, str[0] = 0; i < MAX_COUNT; i++ ) { memcpy( str, TEST_STR, 0, 120 ); str[30] = 0; } time = GetTickCount() - time; printf( " * memcpy: %d msec, str(%d) = `%s`", time, strlen(str), str ); time = GetTickCount(); for ( i = 0, str[0] = 0; i < MAX_COUNT; i++ ) strcopy( str, TEST_STR ); time = GetTickCount() - time; printf( " * strcopy: %d msec, str(%d) = `%s`", time, strlen(str), str ); print("\n"); print( "property test (" #MAX_COUNT " slots)" ); print( " 1. create" ); time = GetTickCount(); for ( i = 0; i < MAX_COUNT; i++ ) setproperty( 0, _, i, TEST_STR ); time = GetTickCount() - time; printf( " * setproperty: %d msec", time ); print( " 2. get 1" ); time = GetTickCount(); for ( i = 0, str[0] = 0; i < MAX_COUNT; i++ ) { getproperty( 0, _, i, str ); strunpack(str,str); } time = GetTickCount() - time; printf( " * getproperty: %d msec, str(%d) = `%s`", time, strlen(str), str ); print( " 3. edit" ); time = GetTickCount(); for ( i = 0; i < MAX_COUNT; i++ ) setproperty( 0, _, i, NEW_TEST_STR ); time = GetTickCount() - time; printf( " * setproperty: %d msec", time ); print( " 4. get 2" ); time = GetTickCount(); for ( i = 0, str[0] = 0; i < MAX_COUNT; i++ ) { getproperty( 0, _, i, str ); strunpack(str,str); } time = GetTickCount() - time; printf( " * getproperty: %d msec, str(%d) = `%s`", time, strlen(str), str ); print( " 5. delete" ); time = GetTickCount(); for ( i = 0; i < MAX_COUNT; i++ ) deleteproperty( 0, _, i ); time = GetTickCount() - time; printf( " * deleteproperty: %d msec", time ); }
и за 4 мсек при 10 тыщ итерациях.
- Самописная Pawn функция по копированию строк при 1000 итерациях выполняется за 23 мсек,
а при 1000 итерациях за 111 мсек.