Szerző Téma: Mi lassít egy szervert?  (Megtekintve 1567 alkalommal)

Mi lassít egy szervert?
« Válasz #15 Dátum: 2011. Május 20. - 00:21:09 »
0 Show voters
Idézetet írta: kurta999 date=1305833078\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"8095\" data-ipsquote-contentclass=\"forums_Topic
Nemkellett volna azt a globális változók témát zárni, mer én akarnák vmit hozzátenni :D.
Nekem ez a véleményen, hogy szerintem nem lassít a globális, mert a pawn single thread. Azaz egy dolog fut egyszerre. Akkor indul a másik, ha az elõtte lévõ lefut. Úgyhogy ugyanúgy fog végezni egy lokális változóval, mint egy globálissal.
 
Lehet de írtam hamar egy rövidke tesztet ami szerint jobb kettõ global string mint egy.
Íme:
 

#include <a_samp>
new
globalone[4096],
globaltwo[4096];
public
OnFilterScriptInit()
{
printf(\"Global string teszt started.\");
globalone = \"teszt\\n\";
new
time;
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
// Egy darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globalone());
printf(\"Egy global string terhelés teszt ideje: %dms\", GetTickCount() - time);
////////////////////////////////////////////////////////////////////////////////
// Két darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globaltwo());
printf(\"Kettõ global string terhelés teszt ideje: %dms\", GetTickCount() - time);
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
//És mégeyszer ugyanez fordított sorrendben:
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
// Két darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globaltwo());
printf(\"Kettõ global string terhelés teszt ideje: %dms\", GetTickCount() - time);
////////////////////////////////////////////////////////////////////////////////
// Egy darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globalone());
printf(\"Egy global string terhelés teszt ideje: %dms\", GetTickCount() - time);
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
return 1;
}
// Az egy darabként létrehozott global string extrem terhelése
stock
_globalone()
{
//--- A terhelés..
for(new i; i < 50000; i++)
format(globalone, sizeof globalone, \"%s\", globalone);
//---
new
str[10];
str = \"teszt\\n\";
return str;
}
// Két darab global string esetében a második string extrem terhelése
stock
_globaltwo()
{
//--- A terhelés..
for(new i; i < 50000; i++)
format(globaltwo, sizeof globaltwo, \"%s\", globaltwo);
//---
new
str[10];
str = \"teszt\\n\";
return str;
}

 
És az eredmény:
 
[2011.05.20 00:11:09] Egy global string terhelés teszt ideje: 9748ms
[2011.05.20 00:11:17] Kettõ global string terheléteszt ideje: 8786ms
[2011.05.20 00:11:26] Kettõ global string terhelés teszt ideje: 8848ms
[2011.05.20 00:11:36] Egy global string terhelés teszt ideje: 9326ms
[/quote]
Ezek alapján csak jobb kettõ mint egy global stringet alkalmazni mindenhol.
Tehát én még mindig maradok annál hogy egy funkciónak legyen saját global stringje, (lefoglalt memória terület, amin tud dolgozni).
De szívesen látnék valami más tesztet ami ennek ellenkezõjét bizonyítja.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal