Frage : Warum ist der org-map-entries
Immobilienabgleich so langsam und was kann ich tun, um ihn zu beschleunigen?
Hintergrund : Ich habe eine relativ einfache Verwendung für org-map-entries
: Ergreifen Sie den Aufwand (in ganzzahligen Minuten) aus allen Einträgen der Organisationsagenda mit einem Tag goal
und einer bestimmten Priorität (z B
. B. ).
(org-map-entries
#'hw-org-get-effort-in-minutes
"goal+PRIORITY=\"B\""
'agenda)
Dies ist furchtbar langsam und dauert über eine Minute für meine Agenda-Datei mit ~ 12.000 Zeilen.
Wenn ich das jedoch PRIORITY
aus dem Filter entferne , damit ein goals
markiertes Element ausgewählt wird, wird es fast sofort abgeschlossen.
Ich kann auch Filter wie einstellen goal/DONE
und sie werden sehr schnell abgeschlossen, aber wenn ich so etwas mache, nehmen goals+EFFORT>0
wir wieder mehr als eine Minute Zeit. Es scheint, dass Eigenschaften im Allgemeinen sehr langsam übereinstimmen.
Ich habe eine Cheat-Problemumgehung gefunden : Ich kann Eigenschaften innerhalb der zugeordneten Funktion sehr schnell mit abgleichen org-entry-get
. Wenn ich das mache, dauert die Ausführung weniger als eine Sekunde. Das scheint albern, hoffentlich gibt es einen besseren Weg, aber zumindest funktioniert es!
Bereits ausprobiert : Seit der (benchmark 1000 (hw-org-effort-to-minutes "1:20"))
Rückkehr "Elapsed time: 0.000019s"
glaube ich nicht, dass meine Funktion viel dazu beiträgt.
Entsprechend profiler
werden ~ 40% der CPU-Zeit von verwendet cond
, wobei ~ 29% aus der Elementanalyse ( org-element--current-element
) stammen. Die nächsten beiden größten Beiträge sind insgesamt 14% und 13%, so dass die 40% cond
den größten Teil des Problems ausmachen. Ich bin mir nicht sicher, warum das Parsen von Elementen mit Eigenschafts-Matchern häufiger durchgeführt wird, es sei denn, der Unterschied besteht darin, dass nur Header (Tags, TODO) und Header + Body (Eigenschaften) analysiert werden.