質問:org-map-entries
プロパティマッチングが非常に遅いのはなぜですか、それを高速化するにはどうすればよいですか?
背景:私は比較的単純な用途がありorg-map-entries
ます:タグgoal
と特定の優先順位(例:)を持つすべての組織アジェンダエントリから(整数分で)作業を取得しますB
。
(org-map-entries
#'hw-org-get-effort-in-minutes
"goal+PRIORITY=\"B\""
'agenda)
これはひどく遅く、私の〜12,000行の議題ファイルに1分以上かかります。
ただし、PRIORITY
フィルターからを削除してgoals
タグ付きアイテムを選択すると、ほぼ即座に完了します。
のようにフィルターを設定することもできますが、フィルターはgoal/DONE
非常に迅速に完了しますが、私がそのようなgoals+EFFORT>0
ことをすると、1分以上かかるようになります。一般に、プロパティのマッチングは非常に遅いようです。
私はチートの回避策を見つけました:を使用して、マップされた関数内のプロパティを非常にすばやく一致させることができますorg-entry-get
。これを実行すると、実行は1秒未満です。これはばかげているようですが、うまくいけばもっと良い方法があると思いますが、少なくともそれはうまくいきます!
すでに試してみました:(benchmark 1000 (hw-org-effort-to-minutes "1:20"))
戻るので"Elapsed time: 0.000019s"
、私の機能はあまり貢献していないと思います。
によるとprofiler
、CPU時間の最大40%がによって使用されcond
、最大29%が要素の解析に起因しています(org-element--current-element
)。次の2つの最大の寄与は14%と13%であるため、40%がcond
問題の大部分を占めているようです。ヘッダー(タグ、TODO)とヘッダー+ボディ(プロパティ)の解析のみが異なる場合を除き、プロパティマッチャーを使用して要素の解析がより頻繁に行われる理由がわかりません。