А в C#, значит, теги создаются на этапе компиляции?
Итак, другой тест, 1000х1000:
- Код: Выделить всё
var sp = new Dictionary<string, string>();
var sw = new Stopwatch();
sw.Reset();
sw.Start();
for (int i = 1000; i >= 0; --i)
for (int j = 1000; j >= 0; --j)
sp[j.ToString()] = j.ToString();
sw.Stop();
long settingTime = sw.ElapsedMilliseconds;
sw.Reset();
int a = 0;
sw.Start();
for (int i = 1000; i >= 0; --i)
for (int j = 1000; j >= 0; --j)
a = Int32.Parse(sp[j.ToString()]) - a;
sw.Stop();
long gettingTime = sw.ElapsedMilliseconds;
Console.WriteLine("That waz funny test, results are {0} and {1} ms; a = {2} just for lulz",
settingTime, gettingTime, a);
Console.ReadKey();
vs.
- Код: Выделить всё
Soup sp = Constructors.NewSoup();
int i, j;
Interface.Log("Test started");
for (i = 1000; i >= 0; --i)
for (j = 1000; j >= 0; --j)
sp.SetNamedTag(j, j);
Interface.Log("Part two");
int a;
for (i = 1000; i >= 0; --i)
for (j = 1000; j >= 0; --j)
a = sp.GetNamedTagAsInt(j) - a;
Interface.Log("All finished, a = " + a);
Результаты:
That waz funny test, results are
357 and
344 ms; a = 500 just for lulz
vs.
? 000010F8 Warn 0:
16.7 Trainz : WorldState::NativeLog> Test started
? 000010F8 Warn 0:
21.9 Trainz : WorldState::NativeLog> Part two
? 000010F8 Warn 0:
26.1 Trainz : WorldState::NativeLog> All finished, a = 500
Итого раз в 15 медленнее. Лучше, чем при миллионе, но есть куда стремиться.
The Cake is a Lie.