我希望使用我编写的代码来加速大型二进制文件的加载和处理。该代码有效,但速度很慢。我想进行改进,但是每当我第二次加载文件时,我都无法获得真正的加载速度,因为缓存内存会加快速度。如何禁用此缓存,或者如何测量代码的真实性能以便进行迭代?
这就是我正在做的事情:
- 首先调用
np.memmap
它来加载一个大的二进制文件 - 索引到 memmapped 数组以检索我想要的值(这是缓慢的部分,afaik)
我尝试手动删除del
存储数据的变量,然后在其上调用垃圾收集器,gc.collect()
但这无济于事。
我应该如何从内存中释放这些信息,以便获得真正的加载时间(或者如何解决这个问题来衡量真正的性能)?我需要 Cython 来正确处理这个问题吗,我希望暂时不要去那里。
编辑,代码位:
加载内存映射:
traces = np.memmap(datapath, dtype='int16', mode='r',
offset=offset, shape=(number_samples, number_channels))
# index into this, where waveform_ids are the indices I need
waveforms=traces[waveform_ids,:].astype(np.float32).T
这两行都是从我的代码中的函数中调用的。在这些之后,我尝试运行垃圾收集器:
import gc
del waveforms
gc.collect()
但是这并没有恢复原来的缓慢加载时间,因此我认为它没有清除内存缓存