我正在使用pickle将大矩阵加载到内存中。第一次运行脚本时,大约需要14秒才能加载整个对象。随后的运行只需要4s。似乎该对象已加载到内存中,执行后未释放。这正常吗?
垃圾收集器不应该立即释放该对象吗?我用不同的文件尝试了不同的时间,结果始终是相同的。
这是我用来测试所描述行为的代码:
def load():
with open('batch-0', 'rb') as read:
data = pickle.load(read)
if __name__ == '__main__':
cProfile.run('load()')
答案 0 :(得分:2)
您发现的内容称为文件系统缓存。读取文件时,操作系统必须将文件页面加载到内存中。操作系统可以将已加载的页面保留在其文件系统缓存中,以希望如果再次需要它们,则不必从较慢的内存层次结构中加载它们。可以告诉操作系统在读取文件后不保留文件。正确的应用程序是为了防止备份扫描破坏文件系统缓存。