python - python sqlite3 是否在交互模式下释放仅内存数据库?

标签 python memory sqlite

我今天查看了 sqlite3 的 Python 单元测试,发现了一些很棒的东西

sqlite.connect(":内存:")

这是一个非常酷的想法,它使单元测试更容易编写。但后来我开始想知道,sqlite3 是否总是释放已使用的内存? sqlite3 是否足够智能,可以在交互模式下解除分配?

最佳答案

OSX 事件监视器未报告正确的内存使用情况。使用 htop 查看正确的使用统计信息。

首先我以交互模式启动解释器

python -i

然后在我写的解释器中

import sqlite3 as sqlite
db = sqlite.connect(":memory:")
db.execute("create table test(id integer primary key, test_text text)")
for i in range(50000000):
    db.execute("insert into test(test_text) values (?)", ("test",))

第一个屏幕截图是交互式 python 运行时的内存使用情况。内存使用量约为 488mb。

enter image description here

小提示,OSX 事件监视器将 python 解释器识别为“终端”,可能是因为它不检查子进程的内存使用情况(不查看 fork )。

enter image description here

第二个屏幕截图是在解释器中调用 exit() 之后的。内存使用量仍然约为 488mb 简而言之,解释器退出时内存不会被释放。

更新: 原来的测试是3.4。刚刚确认 2.7。

更新2: 再次尝试使用 htop 进行测试。 enter image description here

enter image description here

显然,教训不是 python.sqlite3 不会在交互模式下释放,而是你不应该使用 OSX 事件监视器来测试内存使用情况。

这里没什么可看的,继续走吧。

关于python - python sqlite3 是否在交互模式下释放仅内存数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23095221/

相关文章:

python - `setup.py sdist` 是如何工作的?

python - 将 shlex 置于 Debug模式

python - 为什么 models.ForeignKey 有优势?

memory - 三.JS:纹理mipmaps和webGL的引用

c# - 使用 System.Data.SQLite.Linq 时生成错误的 SQL 语句

python - 我可以使用单个文件作为缓冲区吗? IE。同时写入和读取

c++ - 有人请解释一下它的行为是什么?

c# - TiffBitmapEncoder,内存错误导致 C#/WPF 中内存不足异常

android - 如何在 SQLite 中存储 JSON

mysql - SQLite触发器插入错误