Von verschiedenen Seiten wird unermüdlich und völlig unzutreffender Weise ein Zusammenhang zwischen Speicherverbrauch und und CPU-Beanspruchung hergestellt. Wahrscheinlich aufgrund von Beobachtungen aus der realen Welt: Große Autos brauchen mehr Sprit oder "dicke" Menschen laufen im allgemeinen langsamer etc. Für Software trifft das jedenfalls definitiv nicht zu! Und wie meine Vorposter schon festgestellt haben: Ein durchschnittlicher Spiele-PC ist heute mit 6 GByte ausgestattet. Da ist es sowas von egal, ob ein Addon 1, 10 oder 50 MByte verbraucht... Im Übrigen: Wenn man sein Addon als Programmierer konsequent auf niedrige CPU-Beanspruchung auslegt wird man IMMER mehr Speicher brauchen als jemand, der das nicht tut. Performance gewinnt man in LUA unter anderem durch das gezielte Aufbauen von Redundanzen an performance-relevanten Programmstellen.
Beispiel 1, redundante Funktionsdefinitionen:
local UnitName = UnitName;
legt eine lokale Kopie der globalen Funktionsdefinition (nicht: der Funktion) "UnitName" an. Dies belegt ein paar Bytes Speicher zusätzlich, beschleunigt aber den späteren Aufruf der Funktion um ca. 40%
Beispiel zwei, binäres Suchen statt Iterationen:
MEIN_RAID = {
["Peter"] = "unit1",
["Dieter"] = "unit2",
["Heinz"] = "unit3",
["OrangUtanKlaus"] = "unit4",
...
}
mit diesem Array kann ich mit einem Zugriff feststellen, welche unit der Spieler mit dem Namen "Dieter" hat,
wenn ich aber wissen will, wie der Spieler heißt, der sich hinter "unit2" verbirgt, könnte ich entweder das ganze
Array abklappern:
name = nil;
for name, unit in pairs(MEIN_RAID) do
if (unit == "unit2") then
break;
end
end
...
... wodurch sich der Zuwachs an durchschnittlicher Rechenleistung linear mit der Anzahl Raid-Mitglieder steigert, oder mir
b) einmalig eine Redundanz aufbauen (die wieder mehr Speicher belegt):
NAMEN_NACH_UNITS = { };
for name, unit in pairs(MEIN_RAID) do
NAMEN_NACH_UNITS[unit] = name;
end
... wenn ich dann nach dem Namen suche:
name = NAMEN_NACH_UNITS["unit2"];
steigert sich der durschnittliche Rechenaufwand nur noch logarithmisch mit linear zunehmender Zahl Raidmitglieder, was vor
allem bei potentiell sehr großen oder geschachtelten Arrays zum Tragen kommt (also weniger im Beispiel).
Fazit: Von außen ist anhand des Speicherbedarfs nicht feststellbar, ob ein Addon performant ist oder nicht. Ebenso die Verwendung von
Profilern ist mit Vorsicht zu genießen: Addons die in Summe sehr wenig CPU-Load zu erzeugen scheinen können subjektiv die
Performance verschlechtern, wenn z.B. der vorhandene Bedarf an Rechenleistung auf einmal abgerufen wird (ruckeln). Ebenso können Addons
die sehr viel Rechenleistung erfordern, diese aber sinnvoll verteilen vollkommen ohne wahrnehmbare Folgen auf die Performance bleiben.
Ich hoffe, das war verständlich,
Iza, Autor von VuhDo.