emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] faster org-table-align


From: tbanelwebmin
Subject: [PATCH] faster org-table-align
Date: Fri, 8 May 2020 14:50:44 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1

`org-table-align' may benefit from recent `org-table-to-lisp'
speed-up.

The current code contains the following lines in org-table.el. They
parse the table into a Lisp structure, which is precisely what
`org-table-to-lisp' is supposed to do.

  (fields (mapcar
           (lambda (l)
             (and (not (string-match-p org-table-hline-regexp l))
                  (org-split-string l "[ \t]*|[ \t]*")))
           (split-string (buffer-substring beg end) "\n" t)))

Just replace them by a call to `org-table-to-lisp':

  (fields (cl-loop for row in (org-table-to-lisp)
                  collect (and (listp row) row)))

I made a benchmark on a large table (10000 rows, 6 columns). Adding a
column, then removing it, M-S-right M-S-left. I measured time and
memory with profiler-*, taking care to call `garbage-collect'
beforehand. Conclusions:
- `org-table-align' is faster, overall operation is faster
- there is much less garbage collection
- memory allocation is significantly lower

|                                  |   current |       new |   % |
|----------------------------------+-----------+-----------+-----|
| org-table-align  CPU samples     |      1313 |      1102 | 16. |
| overall          CPU samples     |      2040 |      1628 | 20. |
| GC               CPU samples     |      4283 |      2609 | 39. |
| overall          allocated bytes | 622087730 | 272436087 | 56. |
| org-table-align  allocated bytes | 445910318 | 146646065 | 67. |
#+TBLFM: $4=100*($-2-$-1)/$-2;f0

Note: running twice the same bench yields slightly different results.

Have fun
Thierry




reply via email to

[Prev in Thread] Current Thread [Next in Thread]