如果 RAM 使用率很高,加载 .npy 文件的时间会延长 30 倍以上

问题描述 投票:0回答:2

这是加载 .npy 文件时我的 RAM 使用情况,用 del 删除它,调用 gc.collect,然后再次加载它。它的行为符合预期,大约需要 2.5 秒。

这是同样的事情,但是当我在内存中加载其他东西时,我的总 RAM 使用率很高。
加载需要 90 多秒,我的用法是这种锯齿形图案。

这里发生了什么?当我删除数组时,对其进行垃圾回收,然后再次加载它,我希望新加载的数组恰好适合旧数组的位置,而不管我的 RAM 使用总量如何。当它进行这种锯齿形加载时,它花费的时间太长了。

python numpy memory memory-management ram
2个回答
0
投票

您观察到的行为可能是由于当您的 RAM 使用率很高时操作系统管理内存的方式。当您的 RAM 使用率较低时,您的系统可以为您的 numpy 数组分配连续的内存块,从而实现快速加载。但是,当您的 RAM 使用率很高时,系统可能无法找到足够大的连续内存块来容纳您的 numpy 数组。在这种情况下,系统可能需要使用虚拟内存,这会导致加载时间变慢。

另外,当你在Python中删除一个对象时,并不一定意味着它占用的内存会立即释放回操作系统。垃圾收集器可能需要一些时间来释放内存,尤其是当内存由于加载和卸载其他对象而碎片化时。

要进一步调查,您可以尝试在加载具有高 RAM 使用率的 numpy 数组时监视系统的内存使用情况。您也可以尝试加载一个较小的 numpy 数组,使用高 RAM 以查看加载时间是否仍然很慢。如果问题仍然存在,您可能需要考虑优化代码以使用更少的内存或使用对您的用例更有效的不同数据存储格式。


0
投票

这是由称为内存分页的操作系统功能引起的。

简而言之,当系统内存不足时,它有一种机制,通过将不经常访问的内存移动到文件来分配额外的空闲内存。

但是这个过程可能需要比较长的时间,因为它涉及到写入磁盘。看到之字形是如何瞬间攀升并缓慢下降的吗?这是因为爬升的瓶颈是访问物理内存,而下降的瓶颈是访问磁盘。

© www.soinside.com 2019 - 2024. All rights reserved.