Question : Pourquoi la org-map-entries
correspondance des propriétés est-elle si lente et que puis-je faire pour l'accélérer?
Contexte : J'ai une utilisation relativement simple pour org-map-entries
: saisir l'effort (en minutes entières) de toutes les entrées d'agenda de l'organisation avec une balise goal
et une priorité donnée (par exemple B
).
(org-map-entries
#'hw-org-get-effort-in-minutes
"goal+PRIORITY=\"B\""
'agenda)
C'est terriblement lent, prenant plus d'une minute pour mon fichier d'agenda de ~ 12k lignes.
Cependant, si je supprime le PRIORITY
filtre pour que tout goals
élément balisé soit sélectionné, il se termine presque instantanément.
Je peux également définir des filtres comme goal/DONE
et ils se terminent très rapidement, mais si je fais quelque chose comme ça, goals+EFFORT>0
nous reprenons une minute. Il semble que les propriétés en général soient très lentes à correspondre.
J'ai trouvé une solution de contournement : je peux faire correspondre très rapidement les propriétés à l'intérieur de la fonction mappée org-entry-get
. Lorsque je fais cela, l'exécution est inférieure à une seconde. Cela semble idiot, j'espère qu'il y a une meilleure façon, mais au moins ça marche!
Déjà essayé : depuis les (benchmark 1000 (hw-org-effort-to-minutes "1:20"))
retours "Elapsed time: 0.000019s"
, je ne pense pas que ma fonction y contribue beaucoup.
Selon profiler
, ~ 40% du temps CPU est utilisé par cond
, dont ~ 29% provenant de l'analyse des éléments ( org-element--current-element
). Les deux prochaines contributions les plus importantes sont de 14% et 13%, de sorte que les 40% cond
semblent être le gros du problème. Vous ne savez pas pourquoi l'analyse des éléments se ferait plus souvent avec les comparateurs de propriétés, sauf si la différence vient de l'analyse de l'en-tête uniquement (balises, TODO) par rapport à l'en-tête + corps (propriétés).