Not sure if my testing methodology is flawed, but SMObjects seems to be consistently slower than StringMaps:
Code:
PHP Code:
public void OnPluginStart() {
RequestFrame(Bench_StringMaps);
RequestFrame(Bench_SMObjects);
}
void Bench_StringMaps(int a) {
PrintToServer("");
PrintToServer("< Testing StringMaps >");
////////////////////////////////////////////////////////////
PrintToServer("Creating 10k StringMaps");
float startTime = GetEngineTime();
StringMap theTrie = new StringMap();
StringMap tries[9999];
int i; char whatever[8]; float x;
for(i = 0; i < 9999; i++)
tries[i] = new StringMap();
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Writing 100k integers into StringMap");
startTime = GetEngineTime();
for(i = 0; i < 100000; i++)
theTrie.SetValue("int", i);
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Writing 100k floats into StringMap");
startTime = GetEngineTime();
for(x = 0.0; x < 100000.0; x += 1.0)
theTrie.SetValue("float", x);
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Reading 100k floats from StringMap");
startTime = GetEngineTime();
for(i = 0; i < 100000; i++)
theTrie.GetValue("float", x);
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Creating and disposing 10k empty StringMaps");
startTime = GetEngineTime();
for(i = 0; i < 10000; i++) {
StringMap SM = new StringMap();
CloseHandle(SM);
}
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Disposing 10k float filled StringMaps (500)");
startTime = GetEngineTime();
for(i = 0; i < 9999; i++)
for(x = 0; x < 500.0; x += 1.0) {
IntToString(RoundFloat(x), whatever, sizeof(whatever));
tries[i].SetValue(whatever, x);
}
PrintToServer("Filling ==> %f", GetEngineTime() - startTime);
startTime = GetEngineTime();
for(i = 0; i < 9999; i++)
CloseHandle(tries[i]);
PrintToServer("Disposing ==> %f", GetEngineTime() - startTime);
for(i = 0; i < 9999; i++)
tries[i] = new StringMap();
////////////////////////////////////////////////////////////
PrintToServer("Disposing 10k float filled StringMaps (2k)");
startTime = GetEngineTime();
for(i = 0; i < 9999; i++)
for(x = 0; x < 2000.0; x += 1.0) {
IntToString(RoundFloat(x), whatever, sizeof(whatever));
tries[i].SetValue(whatever, x);
}
PrintToServer("Filling ==> %f", GetEngineTime() - startTime);
startTime = GetEngineTime();
for(i = 0; i < 9999; i++)
CloseHandle(tries[i]);
PrintToServer("Disposing ==> %f", GetEngineTime() - startTime);
}
void Bench_SMObjects(int a) {
PrintToServer("");
PrintToServer("< Testing SMObjects >");
////////////////////////////////////////////////////////////
PrintToServer("Creating 10k SMObjects");
float startTime = GetEngineTime();
Object theTrie = new Object();
Object tries[9999];
int i; char whatever[8]; float x;
for(i = 0; i < 9999; i++)
tries[i] = new Object();
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Writing 100k integers into SMObject");
startTime = GetEngineTime();
for(i = 0; i < 100000; i++)
theTrie.SetInt("int", i);
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Writing 100k floats into SMObject");
startTime = GetEngineTime();
for(x = 0.0; x < 100000.0; x += 1.0)
theTrie.SetFloat("float", x);
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Reading 100k floats from SMObject");
startTime = GetEngineTime();
for(i = 0; i < 100000; i++)
x = theTrie.GetFloat("float");
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Creating and disposing 10k empty SMObjects");
startTime = GetEngineTime();
for(i = 0; i < 10000; i++) {
Object SM = new Object();
CloseHandle(SM);
}
PrintToServer("==> %f", GetEngineTime() - startTime);
////////////////////////////////////////////////////////////
PrintToServer("Disposing 10k float filled SMObjects (500)");
startTime = GetEngineTime();
for(i = 0; i < 9999; i++)
for(x = 0; x < 500.0; x += 1.0) {
IntToString(RoundFloat(x), whatever, sizeof(whatever));
tries[i].SetFloat(whatever, x);
}
PrintToServer("Filling ==> %f", GetEngineTime() - startTime);
startTime = GetEngineTime();
for(i = 0; i < 9999; i++)
CloseHandle(tries[i]);
PrintToServer("Disposing ==> %f", GetEngineTime() - startTime);
for(i = 0; i < 9999; i++)
tries[i] = new Object();
////////////////////////////////////////////////////////////
PrintToServer("Disposing 10k float filled SMObjects (2k)");
startTime = GetEngineTime();
for(i = 0; i < 9999; i++)
for(x = 0; x < 2000.0; x += 1.0) {
IntToString(RoundFloat(x), whatever, sizeof(whatever));
tries[i].SetFloat(whatever, x);
}
PrintToServer("Filling ==> %f", GetEngineTime() - startTime);
startTime = GetEngineTime();
for(i = 0; i < 9999; i++)
CloseHandle(tries[i]);
PrintToServer("Disposing ==> %f", GetEngineTime() - startTime);
}