Frage : Warum ist der org-map-entriesImmobilienabgleich 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 goalund 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 PRIORITYaus dem Filter entferne , damit ein goalsmarkiertes Element ausgewählt wird, wird es fast sofort abgeschlossen.
Ich kann auch Filter wie einstellen goal/DONEund sie werden sehr schnell abgeschlossen, aber wenn ich so etwas mache, nehmen goals+EFFORT>0wir 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 profilerwerden ~ 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% condden 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.