Jump to content
  • 0

Gamemode EN/RO


TheGodfather

Question

4 answers to this question

Recommended Posts

  • 1

O revizitare a raspunsului oferit mai devreme care din pacate si din greseala mea a omis o multime de informatii. Promit sa corectez in aceasta revizie.

https://pastebin.com/4vLDGKWm

Rezultat

Un if: 0 ms
1 milion if: 16 ms
1 mesaj formatat  si trimis: 0 ms
1 milion mesaje formatate si trimise: 164 ms
Un if cu mesaj formatat&trimis: 0 ms
1 milion if/else cu mesaje formatate&trimise: 173 ms

Testat pe un Intel i5-4460 3.4GHz destul de mult sub procesoarele care se regasesc pe servere la momentul actual.

Dupa cum se vede chiar daca faci 1 milion de verificari una dupa alta viteaza procesari este neglijabila dar doar daca valoarea corespunde cu primele cazuri, in momentul in care adaugam mai multe cazuri sa fie verificate si valoarea variabilei este mai 'mare' cu cat devine mai lent caz in care folosirea un switch este benefica.

1 milion if, test = 1: 19 ms
1 milion if, test = 2: 24 ms
......
1 milion if, test = 11: 82 ms

 

tickCount = tickcount();

for (new i = 0; i < 1000000; i++)
	{
	    if (test == 1) {}
	    else if (test == 2) {}
	    else if (test == 3) {}
	    else if (test == 4) {}
	    else if (test == 5) {}
	    else if (test == 6) {}
	    else if (test == 7) {}
	    else if (test == 8) {}
	    else if (test == 9) {}
	    else if (test == 10) {}
	    else if (test == 11) {}
	    else {}
	    
	   
	}
	
	printf("1 milion if, test = 11: %i ms", tickcount() - tickCount);

Cat despre switch

1 milion switch, test = 1: 0 ms
1 milion switch, test = 2: 0 ms
.........
1 milion switch, test = 11: 0 ms

 

tickCount = tickcount();
	
	for (new i = 0; i < 1000000; i++)
	{
	    switch (test)
	    {
	        case 1: break;
	        case 2: break;
	        case 3: break;
	        case 4: break;
	        case 5: break;
	        case 6: break;
	        case 7: break;
	        case 8: break;
	        case 9: break;
	        case 10: break;
	        case 11: break;
	    }
	}
	
	printf("1 milion switch, test = 11: %i ms", tickcount() - tickCount);

Concluzie pentru sectiunea asta: Cazul in care planuiesti sa adaugi poate mai mult de 10-20 limbi cel mai bine are fi sa folosesti swtich pentru a face verificarea limbi. Pentru cazul acetui de avea 2 e irelevant ce folosesti.

Facand concluzia de mai devreme am rescris testele cu switch

Un switch/2 cases cu mesaj formatat&trimis: 0 ms
1 milion switch/2 cases cu mesaje formatate&trimise: 172 ms
1 milion switch/10 cases/test = 11 cu mesaje formatate&trimise: 175 ms

Si cele 3 teste https://pastebin.com/A7bYN7h9 (devenea prea mare raspunsul)

Revenind totusi la intrebare. Este atat de neglijabila diferenta de performanta incat nu merita sa iti bati capul, as zice ca diferenta e cat se poate de a fi aproape inexistenta.

Sper ca am raspuns de data aceasta cu mult mai bune informatii.

Link to comment
Share on other sites

  • 0
6 minutes ago, Banditul said:
#include <a_samp>

main()
{
	new bool:test = true;
	new nowTime = gettime();
	printf("Timestamp now: %i", nowTime);
	
	for (new i = 0; i < 1000000; i++)
	{
		if (test)
		{
		    SendClientMessage(0, -1, "Mesaj");
		    test = false;
		}
		else
		{
		    SendClientMessage(0, -1, "Mesaj");
		    test = true;
		}
	}
	new elapsedTime = gettime() - nowTime;
	
	printf("Elapsed time: %i", elapsedTime);
	printf("Timestamp now: %i", gettime());
}

Un test destul de simplu as zice, un loop care genereaza 1 milion de verificari if pentru care valoarea variabilei verificate se schimba mereu.

Rezultat

Timestamp now: 1655379502
Elapsed time: 0
Timestamp now: 1655379502

Nu a durat nici macar 1 secunda ca verificarile sa fie facute.

Sfatul meu: Don't fall into the rabbit hole . Nu iti bate capul cu micro optimizari e pierdere de timp, daca consideri ca scriptul tau ruleaza incet adauga pluginul profiler si vezi ce mai exact iti cauzeaza probleme. In cel mai rau caz probabil un if iti va lua 0.00000000000001s din timpul procesorului sa faca verificarea.

Edit: Poate daca serverul pe care rulezi scriptul foloseste un procesor mai vechi/mai lent de Pentium IV poate poate un if in plus conteaza

Multumesc frumos

Link to comment
Share on other sites

  • 0
4 hours ago, Banditul said:
#include <a_samp>

main()
{
	new bool:test = true;
	new nowTime = gettime();
	printf("Timestamp now: %i", nowTime);
	
	for (new i = 0; i < 1000000; i++)
	{
		if (test)
		{
		    SendClientMessage(0, -1, "Mesaj");
		    test = false;
		}
		else
		{
		    SendClientMessage(0, -1, "Mesaj");
		    test = true;
		}
	}
	new elapsedTime = gettime() - nowTime;
	
	printf("Elapsed time: %i", elapsedTime);
	printf("Timestamp now: %i", gettime());
}

Un test destul de simplu as zice, un loop care genereaza 1 milion de verificari if pentru care valoarea variabilei verificate se schimba mereu.

Rezultat

Timestamp now: 1655379502
Elapsed time: 0
Timestamp now: 1655379502

Nu a durat nici macar 1 secunda ca verificarile sa fie facute.

Sfatul meu: Don't fall into the rabbit hole . Nu iti bate capul cu micro optimizari e pierdere de timp, daca consideri ca scriptul tau ruleaza incet adauga pluginul profiler si vezi ce mai exact iti cauzeaza probleme. In cel mai rau caz probabil un if iti va lua 0.00000000000001s din timpul procesorului sa faca verificarea.

Edit: Poate daca serverul pe care rulezi scriptul foloseste un procesor mai vechi/mai lent de Pentium IV poate poate un if in plus conteaza

image.png.fc01e88c01b24517f7ffa004b2f81fed.png

Normal asa s-ar face un test de viteza, deoarece el cand va trimite mesajul cel mai probabil va fi si formatat!
image.png.b3160cf7c6f342106256f9320405040e.png

Link to comment
Share on other sites

  • 0
21 hours ago, iSorin[] said:

image.png.fc01e88c01b24517f7ffa004b2f81fed.png

Normal asa s-ar face un test de viteza, deoarece el cand va trimite mesajul cel mai probabil va fi si formatat!
image.png.b3160cf7c6f342106256f9320405040e.png

Greseala mea recunosc, greseala de a include lucruri irelevante la intrebare topicului. O sa imi revizuiesc raspunsul sa fie cat mai corect pentru intrebare, multumesc.

Edit: Revizuit raspunsul oferit

  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.