Как узнать ID чела по ID авто?
#17

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
У меня сложилось впечатление, что у вас ну просто совершенно никакие-никакущие прикладные знания об однопоточном программировании, в частности об устройстве амх машины и об основах программирования на павн. Поймите уже, что работа с пварами, гварами, и любым подобным - это вызов нативных функций, причем если углублятся в устройство сампа, то целого каскада функций, это в ЛЮБОМ случае медленнее прямой работы с переменными, и актуально только если вы совершенно бедный нищеброд, и можете держать сервер лишь на вдске с 32мб оперативной памяти, ибо ничего нормального позволить себе не гугу, собственно именно для таких случаев эти функции и созданы. И честно говоря, меня блевать тянет, когда я вижу повсеместное совершенно неуместное использование оных, а следовательно создание лишней работы для процессора.
Запили тест и расскажи тогда о том почему иногда вызов нативных функций будет быстрее. Например:
pawn Код:
new VehID[500];
VehID[playerid] = GetPlayerVehicleID(playerid);
дальнейший вызов GetPlayerVehicleID(playerid) будет быстрее чем VehID[playerid]

А вообще лучше конечно юзать GVar Plugin, он позволяет делать всё тоже самое что и PVar только работает в 3 раза быстрее. https://sampforum.blast.hk/showthread.php?tid=151076

pawn Код:
//////////////////
    new time;
    print("TEST #1");
    time = GetTickCount();
    for (new i = 0; i < 100000; i++) {
        SetGVarInt("DNIWE", i);
    }
    printf("SetGVarInt: %d", GetTickCount() - time);
    time = GetTickCount();
    for (new i = 0; i < 100000; i++) {
        GetGVarInt("DNIWE");
    }
    printf("GetGVarInt: %d", GetTickCount() - time);
//////////////////
    time = GetTickCount(); new DNIWE = 0;
    for (new i = 0; i < 100000; i++) {
        DNIWE = i;
    }
    printf("DNIWE: %d", GetTickCount() - time);
    time = GetTickCount();
    for (new i = 0; i < 100000; i++) {
        DNIWE;
    }
    printf("DNIWE: %d", GetTickCount() - time);
//////////////////
   
    for (new i = 0; i < 100000; i++) {
        format(names[i], sizeof(names[]), "name_%d", i);
    }
    print("TEST #2");
    time = GetTickCount();
    for (new i = 0; i < 100000; i++) {
        SetGVarInt(names[i], i);
    }
    printf("SetGVarInt: %d", GetTickCount() - time);

    time = GetTickCount();
    for (new i = 0; i < 100000; i++) {
        GetGVarInt(names[i]);
    }
    printf("GetGVarInt: %d", GetTickCount() - time);
Код:
TEST #1
SetGVarInt: 54
GetGVarInt: 53
DNIWE: 11
DNIWE: 13

TEST #2
SetGVarInt: 311
GetGVarInt: 102
Обычные чтение\запись GVar-ов занимает 54/100000 = 0,000054ms против 13/100000 = 0,000013ms
Что касается выделении памяти (при первом Set и до Delete) 311/100000 = 0,000311ms.
Даже имея 1000 Gvar-ов на одного игрока в OnPlayerConnect, просчёт займёт треть миллисекунды (0,3ms), что для SAMP сервера более чем незначительно, сам по себе OnPlayerConnect даёт большую задержку. Так что даже такое обильное использование GVar-а, даёт не более чем -0.1% к общей производительности.
(Тесты делал на очень сильно загруженном CPU... в реале эти показатели должны быть в 2-5 раз меньше).
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)