Ich habe in der MSDN Library eine sehr schöne englische Artikelreihe über Listen in .NET gefunden. Dort wird unter anderem auch bestätigt, was ich mir über die Funktionsweise der Klassen ArrayList und List<T> schon gedacht habe. Die Artikel finden sich hier:
http://msdn2.microsoft.com/en-us/library/aa287104(VS.71).aspx
Außerdem habe ich mich ein wenig mit Profiling beschäftigt. Jeder Profi wird mir wahrscheinlich gleich auf den Hinterkopf hauen wollen, wenn ich das sage (Denkvermögen anregen und so), aber wir haben AntMe! bisher nie durch einen Profiler gejagt. Ein Profiler ist ein Programm, das kurz gesagt misst, wie oft jede Methode in einem Programm aufgerufen wird, wie lange das dauert und wie viel Speicher dabei verbraucht wird. Ich werde demnächst einen ausführlichen Blog Eintrag über das Profiling schreiben. Jetzt möchte ich aber bei den Listen bleiben und gebe lediglich folgendes bekannt:
In einem Spiel mit den Demo-A-Meisen wird der Befehl List<T>.Clear() knapp 200 Millionen mal aufgerufen und dessen Ausführung verschlingt über 38% der gesamten Laufzeit des Spiels. Wird zeit die Listen zu optimieren. Schnell.
Beim Leeren der Listen wird durch die komplette Liste iteriert und alle Elemente werden auf null gesetzt. Das dauert seite Zeit. ich denke darüber nach meine Group<T> Klasse so zu ändern, dass das unterlassen wird. Damit bleiben die Elemente in der Liste bis sie überschrieben werden. Das wirkt sich dann positiv auf die Geschwindigkeit aber negativ auf den Speicherverbrauch aus. Ich werde damit ein wenig herumspielen und die Ergebnisse dann hier bekannt geben.
Chuck Norris counted to infinity - twice.