在确认所有优化都已打开, 测试以下代码,
(let* ((gc-cons-threshold most-positive-fixnum))
(message "%s vs %s"
(benchmark-run-compiled 5
(pyim-dregcache-search-word-code "wo-m"))
(benchmark-run-compiled 5
(pyim-dregcache-search-word-code "ai"))))
Emacs 27结果,
(4.94237456 0 0.0) vs (4.940236186 0 0.0)
Emacs 28结果,
(24.107471964000002 0 0.0) vs (24.143487565 0 0.0)
pyim-dregcache-search-word-code
就是一个简单的搜索子字符串,没有用什么算法。
有道友能分析一下吗?
测了一下,就是string-match
特别慢。是C实现的.和native compilation没有关系。
(setq content
(with-temp-buffer
(let ((coding-system-for-read 'utf-8-unix))
(insert-file-contents "3g.txt"))
(buffer-string)))
(message "content length=%s" (length content))
(let* ((gc-cons-threshold most-positive-fixnum))
(message "%s vs %s"
(benchmark-run-compiled 1
(string-match "aaaaa" content))
(benchmark-run-compiled 1
(string-match "bbbbb" content))))
3g.txt
用 base64 /dev/urandom | head -c 3000000000 > 3g.txt
生成。