我正在使用scipy loadmat从.mat文件中加载一些数据。但是,我注意到,每个.mat文件占用的RAM内存很大〜1Gb。我知道.mat文件已压缩等,但是在我看来仍然像是很多内存,因此我尝试调查为什么会这样。
我编写了一个简单的代码段,并注意到,当不加载数据时,我的应用程序需要约25Mb的RAM,而在加载数据时,则需要约1Gb的RAM内存。而且,当我退出调用scipy loadmat的函数时,该内存不会被释放。为了使示例代码更加虚假,我什至不尝试从scipy loadmat中获取结果,而只是调用该函数,但是即使那样,仍然有1Gb的RAM内存被占用。
我也试图显式地调用垃圾收集器,但是它释放了约100Mb的空间,仍然有约900Mb的空间被占用。这是为什么?从loadData函数返回时,为什么我的进程使用的内存不是〜25Mb? Loadmat应该将数据从.mat文件加载到内存中,但是由于没有人引用它,为什么不释放它?
import scipy.io
import os
import gc
import time
file_names = ["data.mat"]
def loadData():
input_files_no = len(file_names)
for i in range(input_files_no):
scipy.io.loadmat(os.path.join("..", "data", file_names[i]), struct_as_record=False, squeeze_me=True, mat_dtype=True)
return
def main():
loadData()
a = 0
print("passed")
while True:
time.sleep(5)
a = a + 1
gc.collect()
main()