Gvim7.3 + Python3 接口的内存使用完全失控
<本文的原始位置: http://bluegene8210.is-programmer.com/posts/26206.html>
---- 为什么会有这种鸟事,为什么为什么。一度以为 Vim 已经很熟不需要再搞了,谁知道风平浪静的日子是没有的。快抓狂了。Vim 是这么成熟的编辑器,这种事难道该发生么。
---- 原本以为是 Python 代码写的有问题,对 Python 不熟,内存泄漏什么的。逐渐排除了以后开始锁定到 Python 接口上面,具体讲就是 vim.buffer 这个东西。这个是测试代码:
1 lcd %:h 2 tabedit tmpbuffer 3 setlocal buftype=nofile 4 5 python3 << EOF 6 for i in range(3): 7 flines= ['x'*200] * 50000 8 vim.command("%s+\\_.*++g") 9 for fl in flines: 10 vim.current.buffer.append(fl) 11 del flines[:] 12 EOF
---- 而这个是结果:
在 gvim7.2 + Python2 接口下面:
第 1 次 source: 46.8 MB 内存,关闭 tmpbuffer 后不变
第 2 次 source: 59.2 MB 内存,关闭 tmpbuffer 后 58.1
第 3 次 source: 61.6 MB 内存,关闭 tmpbuffer 后 60.4
第 4 次 source: 63.9 MB 内存,关闭 tmpbuffer 后 63.6
第 5 次 source: 66.3 MB 内存,关闭 tmpbuffer 后 65.1
在 gvim7.3 + Python3 接口下面:
第 1 次 source: 142.6 MB 内存,关闭 tmpbuffer 后不变
第 2 次 source: 238.5 MB 内存,关闭 tmpbuffer 后不变
第 3 次 source: 334.5 MB 内存,关闭 tmpbuffer 后不变
---- buftype 选项其实对结果无影响。第一个看上去还好。第二个,好像 gvim7.3 的 Python3
接口是没有任何内存回收的,就这么任由它增长。另外初次运行的内存消耗也是 gvim7.2 的三倍。这没问题么?
问题大了。后来索性一直运行,这个是最后的结果:
---- 我表示这不是我的问题。考虑把这个贴到 vim-use 群里面。
---- 这个很打击我写插件的热情。不过还是要写,不写就亏大了,尼玛感觉就跟炒股被套一样。昨天新加的:
1. 丰富了颜色
2. 添加了功能: 除当前节点和它的上级节点之外,关闭其它所有打开的节点。
3. 添加了功能: 锁定根节点,只能在根节点内部浏览。