Burgershot
[Pawn] Opinion on PVars - Printable Version

+- Burgershot (https://www.burgershot.gg)
+-- Forum: SA-MP (https://www.burgershot.gg/forumdisplay.php?fid=3)
+--- Forum: Pawn Scripting (https://www.burgershot.gg/forumdisplay.php?fid=10)
+--- Thread: [Pawn] Opinion on PVars (/showthread.php?tid=2098)



Opinion on PVars - Pinch - 2021-06-05

Hi everyone, I've gotten bored so I started writing a gamemode for fun, I want it to be a RolePlay gamemode with all of the stuff (like the NG-RP) but I want it to be smooth on bigger player base too..

I ran some tests and those were the results
Code:
Timing "PawnPlus list"...
      Mean = 480.00ns
      Mode = 475.00ns
    Median = 477.00ns
     Range = 5.00ns
Timing "Normal var"...
      Mean = 200.00ns
      Mode = 199.00ns
    Median = 200.00ns
     Range = 3.00ns
Timing "Pvar timings"...
      Mean = 483.00ns
      Mode = 481.00ns
    Median = 483.00ns
     Range = 4.00ns

The code I used:

Code:
new List:pp_list[1000];

enum E_PLAYER_DATA {
    E_PLAYER_SOME_VAR,
    E_PLAYER_SOME_VAR_2,
    E_PLAYER_SOME_VAR_3
};
new PlayerData[1000][E_PLAYER_DATA];

hook OnScriptInit()
{
    for(new i = 0; i < 1000; ++i) {
        pp_list[i] = list_new();
        list_resize_var(pp_list[i], 3, VAR_NULL);    
    }
    return Y_HOOKS_CONTINUE_RETURN_1;
}

public OnPlayerConnect(playerid)
{
    wait_ms(5000);
    print("A");
    RUN_TIMING("PawnPlus list")
    {
        list_set(pp_list[playerid], 0, 10000000);
        list_set(pp_list[playerid], 1, 10000000);
        list_set(pp_list[playerid], 2, 10000000);
    }
    RUN_TIMING("Normal var")
    {
        PlayerData[playerid][E_PLAYER_SOME_VAR] = 10000000;
        PlayerData[playerid][E_PLAYER_SOME_VAR_2] = 10000000;
        PlayerData[playerid][E_PLAYER_SOME_VAR_3] = 10000000;
    }
    RUN_TIMING("Pvar timings")
    {
        SetPVarInt(playerid, "key1", 10000000);
        SetPVarInt(playerid, "key2", 10000000);
        SetPVarInt(playerid, "key3", 10000000);
    }
    return 1;
}

So, is it worth it?
Should I use PVars/PP lists? Does it even matter that much when the diff is 200ns?


RE: Opinion on PVars - IllidanS4 - 2021-06-05

The question is incomplete. Use X for what? All 3 features have other differences, and are suited for other things. PP lists are resizable; PVars are maps (so PP maps would be better in a comparison), plus their lookup is linear so the difference will only become apparent for a larger collection.

And the difference should be interpreted in another way. It doesn't matter at all what the absolute difference is for a single call, you should be looking at how it scales. So for 1000 calls it will be 200 µs and so on. But I don't think it matters (for this specific use case) that much since twice slower is still more or less within the same order of magnitude.


RE: Opinion on PVars - Pinch - 2021-06-05

Hmm, I want to store the user data so that's why I tested it this way..🧍🏻


RE: Opinion on PVars - Y_Less - 2021-06-05

He is just saying that your test isn't big enough. You're only testing 3 writes to three variables, you need more like 100.