When I press [M-q] on the following org-mode buffer content: #+begin_src org ,* 绵羊是太阳能农场的优秀管理员 :PROPERTIES: :SOURCE: 奇客Solidot–传递最新科技情报 :DATE(original): [2021-10-25 Mon 17:28] :DATE: [2021-10-26 Tue] :END: 有利于放养家畜和有利于太阳能发电的地方经常重叠。它们都需要平坦、阳光充足,没有高大植被的开阔地。因此 太阳能生产商正越来越多地租用农田运营。 太阳能产量的增加具有环境效益,但是其代价可能是农业产量的下降。因而人们越来越有兴趣寻找在同一个地方结 合农业和太阳能生产的方法。对于康奈尔大学农业综合企业副教授 Todd Schmit 来说,[[https://arstechnica.com/science/2021/10/shepherds-can-cash-in-on-their-sheep-grazing-around-solar-panels/][问题的答案是羊群]]。 这仍然是一个新领域,部分农民正和太阳能生产商合作,在后者的土地上放牧。太阳能生产商付钱给农民,让他们 把羊送到他们的太阳能农场,羊会吃掉杂草和其他可能阻挡阳光到达太阳能板的植物。 羊得到了食物,农民得到了报酬,而太阳能生产商则在不使用割草机和除草机的情况下管理农场的植被------割草 机和除草机很难伸到太阳能面板下方,而且需要使用化石燃料。American Solar Grazing Association(ASGA)的 [[https://solargrazing.org/wp-content/uploads/2021/02/Solar-Site-Sheep-Grazing-in-NY.pdf][报告]]显示,该行业自 2017 年以来,一直在纽约州扩张。帝国州(纽约州)报告指出,目前有 900 英亩的太阳能 生产土地正在放牧。增长空间仍然很大。 #+end_src Emacs often suspend for a long time. So I take a profiling test with Emacs profiler. Seems =org-fill-element= spend a lot of CPU and memory. Here is the result: CPU Profiler Report: #+begin_example 3623 65% - command-execute 3623 65% - call-interactively 3623 65% - funcall-interactively 3141 56% - org-fill-paragraph 3141 56% - let 3141 56% - cond 3141 56% - let 3141 56% - unwind-protect 3141 56% - progn 3140 56% - while 2096 37% - org-fill-element 2090 37% - let 2090 37% - unwind-protect 2089 37% - progn 2079 37% - let 2044 36% - save-excursion 2032 36% - org-element-at-point 2027 36% - let 1546 27% - if 1473 26% - progn 1473 26% - if 1473 26% - if 1467 26% - org-element--cache-sync 1467 26% - if 1467 26% - progn 1441 25% - save-current-buffer 1416 25% - if 1410 25% - let 1400 25% - let 1334 23% - catch 1332 23% - and 1332 23% - org-indent-add-properties 1332 23% - let 1332 23% - unwind-protect 1332 23% - progn 1332 23% - save-excursion 1332 23% - save-restriction 1301 23% - let 1301 23% - catch 1301 23% - and 1301 23% - org-indent-add-properties 1301 23% - let 1301 23% - unwind-protect 1301 23% - progn 1301 23% - save-excursion 1301 23% - save-restriction 1301 23% - let* 1296 23% - let* 1296 23% - unwind-protect 1296 23% - progn 1296 23% - while 1296 23% - cond 1155 20% and 87 1% - org-at-item-p 83 1% - save-excursion 80 1% - and 65 1% - org-list-in-valid-context-p 64 1% - not 63 1% - org-in-block-p 63 1% - let 60 1% - unwind-protect 60 1% - progn 60 1% + catch 8 0% + looking-at 40 0% + org-indent-set-line-properties 4 0% + let* 4 0% + or 1 0% + org-get-limited-outline-regexp 30 0% + let* 1 0% + if 1 0% + while 5 0% + if 51 0% + and 10 0% + if 4 0% + org-element--cache-active-p 3 0% + eq 481 8% + setq 1 0% setq 14 0% + let* 1036 18% + org-backward-paragraph 476 8% + counsel-M-x 3 0% + next-line 2 0% + end-of-buffer 1 0% + previous-line 1917 34% - ... 1917 34% Automatic GC 17 0% + timer-event-handler 12 0% + redisplay_internal (C function) 1 0% + global-aggressive-indent-mode-check-buffers 1 0% + emojify-update-visible-emojis-background-after-command #+end_example Memory Profiler Report #+begin_example 264,854,075 76% - command-execute 264,854,075 76% - call-interactively 264,854,075 76% - funcall-interactively 255,418,275 73% - org-fill-paragraph 255,418,275 73% - let 255,418,275 73% - cond 255,204,659 73% - let 255,204,659 73% - unwind-protect 255,204,659 73% - progn 255,204,659 73% - while 180,115,491 51% - org-backward-paragraph 180,115,491 51% - if 180,115,491 51% - while 180,115,491 51% - org--backward-paragraph-once 176,778,067 50% - save-restriction 176,778,067 50% - cond 165,159,987 47% - let* 141,442,819 40% - org--paragraph-at-point 138,407,875 39% - let* 107,627,587 31% - org-element-at-point 106,599,043 30% - let 60,513,047 17% - setq 60,513,047 17% - if 59,896,343 17% - condition-case 56,847,671 16% - org-element--parse-to 56,847,671 16% - catch 26,082,351 7% - let 22,117,552 6% - unwind-protect 22,117,552 6% - progn 20,683,728 5% - save-excursion 20,683,728 5% - save-restriction 15,229,632 4% - let* 6,096,288 1% + let 3,049,728 0% and 2,037,024 0% cond 46,085,996 13% + if 20,238,240 5% + if 7,524,000 2% + cond 9,968,048 2% + cond 995,808 0% if 2,436,160 0% + and 73,443,920 21% - org-fill-element 71,424,848 20% - let 71,424,848 20% - unwind-protect 71,424,848 20% - progn 70,403,696 20% - let 66,939,368 19% - save-excursion 64,924,520 18% - org-element-at-point 63,913,928 18% - let 34,076,928 9% - setq 34,076,928 9% - if 33,458,112 9% - condition-case 30,389,376 8% - org-element--parse-to 30,389,376 8% - catch 29,392,512 8% - let 25,565,952 7% - unwind-protect 25,565,952 7% - progn 24,103,120 6% - save-excursion 20,814,528 6% - save-restriction 15,259,200 4% - let* 6,083,616 1% + let 3,057,120 0% and 2,057,088 0% cond 29,837,000 8% + if 1,036,408 0% + let* 213,616 0% + save-excursion 9,014,486 2% + counsel-M-x 375,920 0% + previous-line 28,348 0% + next-line 9,984 0% + org-end-of-line 6,336 0% + keyboard-quit 484 0% + end-of-buffer 242 0% + set-mark-command 65,166,568 18% - redisplay_internal (C function) 64,739,756 18% - jit-lock-function 64,739,756 18% - jit-lock-fontify-now 64,739,756 18% - jit-lock--run-functions 64,739,756 18% - run-hook-wrapped 64,739,756 18% - # 64,467,389 18% - font-lock-fontify-region 64,467,389 18% - font-lock-default-fontify-region 64,466,333 18% - font-lock-fontify-keywords-region 64,230,944 18% + org-activate-links 8,288 0% + org-cite-activate 6,944 0% + org-raise-scripts 6,176 0% + org-fontify-meta-lines-and-blocks 6,160 0% + org-activate-dates 5,440 0% + org-activate-tags 5,440 0% + org-activate-footnote-links 5,340 0% + org-fontify-entities 5,248 0% + org-fontify-drawers 5,248 0% + org-fontify-macros 5,248 0% + org-font-lock-add-priority-faces 5,120 0% + org-font-lock-add-tag-faces 5,120 0% + org-do-emphasis-faces 5,120 0% + org-do-latex-and-related 5,120 0% + org-activate-code 1,056 0% + font-lock-unfontify-region 254,519 0% + emojify-redisplay-emojis-in-region 15,736 0% + valign-region 239,728 0% + eval 178,900 0% + # 16,698,568 4% + timer-event-handler 42,080 0% + emojify-update-visible-emojis-background-after-command 18,768 0% + winner-save-old-configurations 3,180 0% + gui-set-selection 2,154 0% + # 0 0% ... #+end_example