Wie ich aus dem Handbuch (letzte Absätze von http://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Hash.html ) und der Frage /programming/11745097 verstehe / Beim Stackoverflow kann eine gedruckte Version einer Hashtabelle auf der Disc gespeichert werden, um sie zur späteren Verwendung zu laden.
Zum Beispiel die gedruckte Version einer Hashtabelle, die von erstellt wurde
(setq ht (make-hash-table :test 'equal))
(puthash "orange" 1 ht)
(puthash "apple" 2 ht)
ist wie folgt
#s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("orange" 1 "apple" 2))
Ist diese gedruckte Version bereits das beste Format (aus Gründen der Geschwindigkeit), das Emacs verwenden kann? Gibt es ein spezielles Verfahren zum Neuformatieren (Byte-Kompilieren, Ändern) des oben gedruckten Formats in ein besseres Format (möglicherweise nur maschinenlesbar), damit Emacs diese Hashtabelle schneller lädt? Wenn die Antwort positiv ist, wie geht das?
quelle
Sie müssen jeden Wert hashen und einfügen, egal was passiert, und wenn Sie nicht mit riesigen Hash-Tabellen zu tun haben, sollte die aufgewendete Zeit eigentlich keine Rolle spielen. Wenn Ihre Tabellen jedoch groß sind, sollten Sie den
:size
Parameter verwenden,make-hash-table
damit keine Neuzuweisungen erfolgen müssen. Wenn eine Hash-Tabelle den Schwellenwert erreicht, ist es ein großer Leistungsverlust, einen neuen Speicherplatz neu zuzuweisen, um die Werte zu speichern und alle aktuellen Einträge erneut zu verarbeiten.Wenn Sie wissen, dass Sie 1 Million Einträge in eine Hash-Tabelle einfügen möchten, verwenden Sie
(make-hash-table :size 1000000)
Betrachten Sie den folgenden Benchmark:
Sie können auch Ihre eigene Test- und Hash-Funktion für Hash-Tabellen definieren. Wenn Sie wissen, dass sich Ihre Schlüssel in einem bestimmten Satz befinden, können Sie möglicherweise schnellere Gleichheits- und Hashing-Funktionen schreiben, die dies ausnutzen. Siehe :
define-hash-table-test
.quelle
#s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("orange" 1 "apple" 2 ..............))
. Ich kann diese Hash-Tabelle laden. Ich war interessiert zu wissen, ob dieser Dateityp das beste Format ist, das Emacs verwenden kann, um die Tabelle schnell zu laden.