我已经开始使用 Python 的搁置模块(而且我对 Python 本身很陌生),虽然它可以完美地存储和加载信息,但 RAM 的使用是......奇怪。
我要保存的部分是位于另一个地图的某些坐标上的地图,以及对于任何给定坐标可能存在或不存在的值的选择,例如“fov1”和“fov2”。例如,在 x=50 和 y=100 的“小地图”上,可能有另一张地图,我想要保存。Minimap[50][100] 也可能有例如 fov0 和 fov1 的列表,但没有其他任何东西。最大 fov 值为 fov75。
这是我的保存/加载功能。
这个保存功能意味着查看哪些地图需要保存(那些不是空白的,当前没有保存的),然后将地图保存为 Xcoord + 'x' + Ycoord (例如'50x100')并将 fov 部分保存为 Xcoord + 'x' + Ycoord + 'f' + fov 的数量,(例如,'50x100f2')。这一切都很好。然后我还希望它删除当时保存在 RAM 中的地图,并删除所有存在的 fov 段,以便释放内存。这似乎也有效。
def save_maps():
file = shelve.open(savename, 'w')
for x in range(200):
for y in range(200):
if minimap[x][y].map is not 'blank' and minimap[x][y].map is not 'saved':
mapname = str(x) + 'x' + str(y)
file[mapname] = minimap[x][y].map
minimap[x][y].map = 'saved'
for p in range(76):
try:
fov = getattr(minimap[x][y], 'fov' + str(p))
fovname = str(x) + 'x' + str(y) + 'f' + str(p)
file[fovname] = fov
delattr(minimap[x][y], 'fov' + str(p))
except:
pass
file.close()
同时,这里是加载函数,用于调出地图、所有 fov,然后将它们放回原处。再一次,这很完美。
def load_map(x, y):
file = shelve.open(savename, 'w')
mapname = str(x) + 'x' + str(y)
minimap[x][y].map = file[mapname]
for p in range(76):
try:
fovname = str(x) + 'x' + str(y) + 'f' + str(p)
setattr(minimap[x][y], 'fov' + str(p), file[fovname])
except:
pass
file.close()
然而,奇怪的是 RAM 的使用,因为我在测试它时一直在看任务管理器。简单地保存一个地图实际上增加了 python 正在使用的 RAM!这肯定不对吧?或者,如果我一次保存一大块,RAM 会按原样下降,但是如果我将它们全部加载回来,那么 RAM 就会比保存它们之前的值高得多。如果我再次保存/加载,RAM 不会增加;它只会在第一个保存/加载周期增加,然后再也不会增加。我整天都在研究这个问题,无法弄清楚是什么导致了这种奇怪,以及如何解决它。谁能帮我吗?
编辑:哦,是的,使用 Python 2.7.2。此外,一次保存的地图不会超过 9 张。