Ich entwickle einige Algorithmen in Lua, die hauptsächlich in Lua ausgeführt werden (wenige Aufrufe von C ++), und ich bemerke eine enorme Verlangsamung, wenn ich sie über meine App und nicht über den Standard-Lua-Interpreter ausführe. Das Skript kehrt mit dem Interpreter in ungefähr 11 Sekunden und mit meinem Programm in ungefähr 5+ Minuten zurück .
Ich denke nicht, dass es ein Problem beim Aufrufen der C ++ - Funktion ist. Das Überschreiben dieser Funktion mit einer leeren Funktion im Skript hat keine merklichen Auswirkungen auf die Zeit.
Sowohl Lua als auch das Programm werden mit Visual Studio 2010 kompiliert (ich habe eine neue Lösung für Lua erstellt, mit Projekten sowohl für den Interpreter als auch für die statische Bibliothek).
Ich habe einen Profiler für den Code ausgeführt (der Very Sleepy-Profiler kann einen Lua-Profiler nicht zum Laufen bringen, habe aber nicht zu viel versucht) und festgestellt, dass in meiner Anwendung etwa 50% der Zeit für malloc .. und 40% kostenlos, beide vom Lua-Garbage-Collector aufgerufen (versucht, dies zu deaktivieren, um dies zu überprüfen, aber das stürzt ab, wenn zu viel Speicher verwendet wird (verständlicherweise). Der Lua-Interpreter überprüft die RAM-Auslastung von ca. 4 MB).
Ich bin neu bei Lua, also ist es sehr wahrscheinlich, dass ich irgendwo etwas falsch gemacht habe. Hat jemand ein paar Tipps zum Ausprobieren?
Antworten:
Wie Sie sagen, macht Lua Speicherzuweisungen standardmäßig wie verrückt. Sie sollten in Betracht ziehen , einen benutzerdefinierten Allokator zu schreiben , der die von Ihren Lua-Programmen normalerweise verwendeten Allokationsmuster besser kennt , oder etwas wie tcmalloc einstecken, um eine rundum bessere Allokationsleistung zu erzielen.
quelle