numpy 如果RAM使用率较高,则加载.npy文件的时间将延长30倍以上

0tdrvxhp  于 2023-04-30  发布在  其他
关注(0)|答案(2)|浏览(122)

这是我的RAM使用时加载。npy文件,用del删除,调用gc。收集,然后再次加载。它的行为与预期的一样,大约需要2。还有五秒

这里是同样的事情,但虽然我有其他的东西加载在内存中,所以我的总内存使用率很高。
它需要超过90秒的时间来加载和我的使用做这个之字形模式。

这是怎么回事?当我删除数组,垃圾收集它,然后再次加载它时,我希望新加载的数组正好适合旧数组的位置,而不管我的总RAM使用量如何。当它这样做之字形加载它需要太长的时间。

qq24tv8q

qq24tv8q1#

您观察到的行为可能是由于操作系统在RAM使用率较高时管理内存的方式造成的。当RAM使用率较低时,系统可以将连续的内存块分配给numpy数组,这允许快速加载。但是,当RAM使用率很高时,系统可能无法找到足够大的连续内存块来容纳numpy数组。在这种情况下,系统可能需要使用虚拟内存,这会导致加载时间变慢。
此外,当你在Python中删除一个对象时,并不一定意味着它占用的内存会立即释放回操作系统。垃圾回收器可能需要一些时间来释放内存,特别是当内存由于加载和卸载其他对象而碎片化时。
要进一步研究,您可以尝试在加载具有高RAM使用率的numpy数组时监视系统的内存使用情况。您还可以尝试加载一个较小的具有高RAM使用率的numpy数组,以查看加载时间是否仍然很慢。如果问题仍然存在,您可能需要考虑优化代码以使用更少的内存,或者使用对您的用例更有效的不同数据存储格式。

tvz2xvvm

tvz2xvvm2#

这是由一个名为memory paging的操作系统功能引起的。
简而言之,当系统耗尽内存时,它有一种机制通过将不经常访问的内存移动到文件来分配额外的空闲内存。
但是,此过程可能需要相对较长的时间,因为它涉及到写入磁盘。看到锯齿形是如何迅速上升和缓慢下降的吗?这是因为爬升的瓶颈是对物理内存的访问,而下降的瓶颈是对磁盘的访问。

相关问题