Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
|
Re: FastMM grotten langsam ?!
18. Nov 2005, 15:23
Was ist die effizientest Alternative aus unserer Sicht ?
1.) Optimierung an der Stelle wo der meiste Gewinn zu erwarten ist, in den eigenen Algorithmen.
2.) Vermeidung quasi Vorbeugung. D.h. man versucht die Aufrufe an den MM von Anfang an zu reduzieren.
Gerade im LongString-Bereich kann man da einiges verbesseren. Statt also LongString weiderholt additiv zusammenzubauen -> R := R + S; wird ein langer möglichst in seiner LÄnge exakt vorausberechneter String prealloziert und dann durch einfach Kopierungen zusammengebaut. In den meisten Fälle optimiert man damit nicht nur EIN Problem sondern gleich MEHERE auf einmal. Dementsprechen sieht der Performancgewinn im Nachinein auch aus. Nicht nur 50% schneller sondern bis zu 500-1000% schneller kann so eine Funktion werden. Diese Ratio ist einfach nicht mit einem besseren MM erraichbar, das geht einfach nicht.
Eine weitere Optimierung ist das informelle Wissen. D.h. man weis das spezielle gleichgroße Datenstrukturen im Programm benutzt werden und optimiert indem man deren dynamische Speicheranforderungen in statisch und preallozierte und postdeallozierte Speicheraufrufe umwandelt. Man baut quasi einen Cache nur für diese speziellen Datenstrukturen. Auch dies kann die Performance weit mehr als nur 30-50% erhöhen, öfters wird man weit mehr als 500%-1000% Steigerungen erreichen können !
Woran liegt das ?
Einerseits darin das man wesentlich schneller solche preallozioerten gelichgroßen Blöcke allozieren und freigeben kann. Aber auch andererseits weil man so definitiv 0% Fragmentierungen der Speicherblöcke erreichen kann. Und diese Fragmentierung des Speichers ist das as jeden MM zu schaffen machen wird.
Gruß Hagen
|