Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!
Самый быстрый INI ридер/райтер ( Penis )

Самый быстрый INI ридер/райтер ( Penis ) 2025-10-08

Янв
335
62
Пользователь
pawneror добавил(а) новый ресурс:

Самый быстрый INI ридер/райтер ( Penis ) - Самый быстрый INI ридер/райтер ( Penis )

📚 PENIS — Ultra-Fast Key-Value Config Handler for SA-MP

PENIS — это высокопроизводительная библиотека для работы с конфигурационными файлами в формате key = value (аналог INI), разработанная специально для серверов San Andreas Multiplayer (SA-MP) на языке Pawn.

Важно: Название PENIS не имеет никакого отношения к анатомии. Это аббревиатура от Pawn Efficient Non-blocking In-memory...

Узнать больше об этом ресурсе...
 
Дек
367
78
Активный
OFFTOP

и ким хуем проведено сравнение что САМЫЙ БЫСТРЫЙ???

 
𝚖𝚎𝚖𝚎𝚗𝚝𝚘 𝚖𝚘𝚛𝚒.
Мар
1,175
12,484
Команда форума
Администратор
Тесты проводились с задержкой в 10 секунд от предыдущего теста. Тесты проводились в записи и в чтении файлов.

Результаты:
Код:
[13:23:38] [test_ini] Penis write: 65 ms. (1000 files)
[13:23:38] [test_ini] Penis read: 45 ms. (1000 files)
[13:23:48] [test_ini] mxINI write: 56 ms. (1000 files)
[13:23:48] [test_ini] mxINI read: 32 ms. (1000 files)

Код, с помощью которого проводились тесты:

Pawn:
forward check_penis();
public check_penis() {
    new tick_start,
        tick_result;

    tick_start = GetTickCount();
    for(new i; i < 1000; ++i) {
        new tmp_string[16];
        format(tmp_string, sizeof tmp_string, "players/%d.pen", i + 1);

        new cfg = penis_create(tmp_string);
        if (cfg < 0)
            cfg = penis_open(tmp_string);

        if (cfg >= 0)
        {
            penis_set_str(cfg, "name", "John_Doe");
            penis_set_int(cfg, "score", 9876);
            penis_set_float(cfg, "health", 99.5);

            penis_close(cfg);
        }
    }
    tick_result = (GetTickCount() - tick_start);
    printf("[test_ini] Penis write: %d ms. (1000 files)", tick_result);

    //

    tick_start = GetTickCount();
    for(new i; i < 1000; ++i) {
        new tmp_string[16];
        format(tmp_string, sizeof tmp_string, "players/%d.pen", i + 1);

        new cfg = penis_open(tmp_string);

        new name[32],
            score,
            Float:hp;

        penis_get_str(cfg, "name", name);
        penis_get_int(cfg, "score", score);
        penis_get_float(cfg, "health", hp);

        penis_close(cfg);
    }
    tick_result = (GetTickCount() - tick_start);
    printf("[test_ini] Penis read: %d ms. (1000 files)", tick_result);
    return 1;
}

forward check_mxini();
public check_mxini() {
    new tick_start,
        tick_result,
        inifile;

    // test ini readers (mxini)
    tick_start = GetTickCount();
    for(new i; i < 1000; ++i) {
        new tmp_string[16];
        format(tmp_string, sizeof tmp_string, "%d.ini", i + 1);

        inifile = ini_createFile(tmp_string);

        ini_setString(inifile, "name", "John_Doe");
        ini_setInteger(inifile, "score", 9876);
        ini_setFloat(inifile, "health", 99.5);

        ini_closeFile(inifile);
    }
    tick_result = (GetTickCount() - tick_start);
    printf("[test_ini] mxINI write: %d ms. (1000 files)", tick_result);

    //

    tick_start = GetTickCount();
    for(new i; i < 1000; ++i) {
        new tmp_string[16];
        format(tmp_string, sizeof tmp_string, "%d.ini", i + 1);

        inifile = ini_openFile(tmp_string);

        new name[32],
            score,
            Float:hp;

        ini_getString(inifile, "name", name);
        ini_getInteger(inifile, "score", score);
        ini_getFloat(inifile, "health", hp);
       
        ini_closeFile(inifile);
    }
    tick_result = (GetTickCount() - tick_start);
    printf("[test_ini] mxINI read: %d ms. (1000 files)", tick_result);
    return 1;
}

Код первого ini-ридера был взят напрямую со страницы ресурса. Код для mxini был написан одинаково.
Код запуска тестов:
Pawn:
SetTimer("check_penis", 10000, false);
SetTimer("check_mxini", 20000, false);

UPD: забыл упомянуть, что сам ini-ридер не рабочий. Проблема в макросе, который нейронка написала как функцию. Собственно, клин клином вышибает, потому и исправлял нейронкой.
 
Янв
335
62
Пользователь
Тесты проводились с задержкой в 10 секунд от предыдущего теста. Тесты проводились в записи и в чтении файлов.

Результаты:
Код:
[13:23:38] [test_ini] Penis write: 65 ms. (1000 files)
[13:23:38] [test_ini] Penis read: 45 ms. (1000 files)
[13:23:48] [test_ini] mxINI write: 56 ms. (1000 files)
[13:23:48] [test_ini] mxINI read: 32 ms. (1000 files)

Код, с помощью которого проводились тесты:

Pawn:
forward check_penis();
public check_penis() {
    new tick_start,
        tick_result;

    tick_start = GetTickCount();
    for(new i; i < 1000; ++i) {
        new tmp_string[16];
        format(tmp_string, sizeof tmp_string, "players/%d.pen", i + 1);

        new cfg = penis_create(tmp_string);
        if (cfg < 0)
            cfg = penis_open(tmp_string);

        if (cfg >= 0)
        {
            penis_set_str(cfg, "name", "John_Doe");
            penis_set_int(cfg, "score", 9876);
            penis_set_float(cfg, "health", 99.5);

            penis_close(cfg);
        }
    }
    tick_result = (GetTickCount() - tick_start);
    printf("[test_ini] Penis write: %d ms. (1000 files)", tick_result);

    //

    tick_start = GetTickCount();
    for(new i; i < 1000; ++i) {
        new tmp_string[16];
        format(tmp_string, sizeof tmp_string, "players/%d.pen", i + 1);

        new cfg = penis_open(tmp_string);

        new name[32],
            score,
            Float:hp;

        penis_get_str(cfg, "name", name);
        penis_get_int(cfg, "score", score);
        penis_get_float(cfg, "health", hp);

        penis_close(cfg);
    }
    tick_result = (GetTickCount() - tick_start);
    printf("[test_ini] Penis read: %d ms. (1000 files)", tick_result);
    return 1;
}

forward check_mxini();
public check_mxini() {
    new tick_start,
        tick_result,
        inifile;

    // test ini readers (mxini)
    tick_start = GetTickCount();
    for(new i; i < 1000; ++i) {
        new tmp_string[16];
        format(tmp_string, sizeof tmp_string, "%d.ini", i + 1);

        inifile = ini_createFile(tmp_string);

        ini_setString(inifile, "name", "John_Doe");
        ini_setInteger(inifile, "score", 9876);
        ini_setFloat(inifile, "health", 99.5);

        ini_closeFile(inifile);
    }
    tick_result = (GetTickCount() - tick_start);
    printf("[test_ini] mxINI write: %d ms. (1000 files)", tick_result);

    //

    tick_start = GetTickCount();
    for(new i; i < 1000; ++i) {
        new tmp_string[16];
        format(tmp_string, sizeof tmp_string, "%d.ini", i + 1);

        inifile = ini_openFile(tmp_string);

        new name[32],
            score,
            Float:hp;

        ini_getString(inifile, "name", name);
        ini_getInteger(inifile, "score", score);
        ini_getFloat(inifile, "health", hp);
    
        ini_closeFile(inifile);
    }
    tick_result = (GetTickCount() - tick_start);
    printf("[test_ini] mxINI read: %d ms. (1000 files)", tick_result);
    return 1;
}

Код первого ini-ридера был взят напрямую со страницы ресурса. Код для mxini был написан одинаково.
Код запуска тестов:
Pawn:
SetTimer("check_penis", 10000, false);
SetTimer("check_mxini", 20000, false);

UPD: забыл упомянуть, что сам ini-ридер не рабочий. Проблема в макросе, который нейронка написала как функцию. Собственно, клин клином вышибает, потому и исправлял нейронкой.

и зачем? Это всего лишь был рофл. Так сильно задели посты в соседней теме?)

Реальный вопрос над подумать для всех разработчиков: добиться реального прироста в скорости у mxini. Лично у меня не получилось. Если бы получилось, то тема была бы не совсем рофлом.
 
𝚖𝚎𝚖𝚎𝚗𝚝𝚘 𝚖𝚘𝚛𝚒.
Мар
1,175
12,484
Команда форума
Администратор
Это всего лишь был рофл. Так сильно задели посты в соседней теме?)
Каким образом они меня могли задеть?)
Был вопрос в данной теме - я дал ответ на данный вопрос и на название ресурса.
Сейчас же как администратор портала предупрежу - будьте добры, проверяйте ресурсы, которые хотите выкладывать на всеобщее обозрение.
 
Сверху