Question : Pourquoi la org-map-entriescorrespondance 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 goalet 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 PRIORITYfiltre 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/DONEet ils se terminent très rapidement, mais si je fais quelque chose comme ça, goals+EFFORT>0nous 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% condsemblent ê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).