簡體   English   中英

為什么我的測試sqlite數據庫的“填充”占用了這么多的RAM,卻沒有保存任何東西?

[英]Why does the 'filling' of my test sqlite db take up so much RAM and doesn't save anything?

我有以下腳本為我填充測試數據庫。

#!/usr/bin/python

import random, sys, sqlite3

con = sqlite3.connect('test.db')

cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS EXAMPLE")
cur.execute("CREATE TABLE EXAMPLE(FIRST TEXT, SECOND TEXT)")

for i in range(0, 99999999):
    one = format(i, '08d')
    two = "%0.8d" % random.randint(0,99999999)
    cur.execute("INSERT INTO EXAMPLE VALUES(\'"+one+"\',\'"+two+"\')")

    con.commit()

    # to have some feedback of the progress
    if i % 100000 == 0:
        print (str(i))

con.close()
print ("done")
# wait in the script..
sys.stdin.readline()

現在,腳本將在大約2分鍾內(它在幾秒鍾內)占用所有它可能的RAM(當前在具有3GB的VM中運行-占用約2.8GB),並且從未達到if i % 100000 == 0: 如果我終止它並檢查test.db文件,它的大小為3KB,僅包含該表,沒有任何條目。

我是否需要不時關閉並重新打開連接?

正如我的評論所建議的那樣,返回包含許多元素的列表時,應該考慮使用irange而不是range ,特別是如果您只打算使用一次列表時。

區別在於實現。 range創建整個列表,然后返回列表中的元素。 irange都會創建並返回列表中的下一個元素,因此它不會做太多的工作。

函數調用是可以互換的,據我所知,所以只需更換range在你的代碼irange ,你應該看到較少的內存消耗。

還要檢查這個問題: irange()與range()或xrange()有何不同?

編輯:

抱歉,我的回答很快。 使用xrange而不是我以前寫的irange 對於何時在另一個之上使用: 您是否應該始終偏愛xrange()而不是range()?

在Python 3中使用range或xrange無關緊要的原因是AFAIK,因為range被實現為xrange。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM