27.12.2012, 06:26
(
Последний раз редактировалось AirKite; 27.12.2012 в 07:04.
)
Quote:
|
У меня сложилось впечатление, что у вас ну просто совершенно никакие-никакущие прикладные знания об однопоточном программировании, в частности об устройстве амх машины и об основах программирования на павн. Поймите уже, что работа с пварами, гварами, и любым подобным - это вызов нативных функций, причем если углублятся в устройство сампа, то целого каскада функций, это в ЛЮБОМ случае медленнее прямой работы с переменными, и актуально только если вы совершенно бедный нищеброд, и можете держать сервер лишь на вдске с 32мб оперативной памяти, ибо ничего нормального позволить себе не гугу, собственно именно для таких случаев эти функции и созданы. И честно говоря, меня блевать тянет, когда я вижу повсеместное совершенно неуместное использование оных, а следовательно создание лишней работы для процессора.
|
pawn Код:
new VehID[500];
VehID[playerid] = GetPlayerVehicleID(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
Что касается выделении памяти (при первом Set и до Delete) 311/100000 = 0,000311ms.
Даже имея 1000 Gvar-ов на одного игрока в OnPlayerConnect, просчёт займёт треть миллисекунды (0,3ms), что для SAMP сервера более чем незначительно, сам по себе OnPlayerConnect даёт большую задержку. Так что даже такое обильное использование GVar-а, даёт не более чем -0.1% к общей производительности.
(Тесты делал на очень сильно загруженном CPU... в реале эти показатели должны быть в 2-5 раз меньше).


