在读取大量小文件时靠后的文件总是打开的特别慢

Viewed 37

问题描述


如题,在需要读取大量小文件时,靠后的文件总是打开的比靠前的慢很多,已经更换了速度更快的sd卡了(目前使用64G卡),打开时能快一点但明显还是会越来越慢,请问这个要怎样解决呢?
目前我是在电脑上先将所有小文件合并为单个文件,然后在k230上一次打开,这样速度就没有明显问题。

复现步骤


首先在电脑上创建测试用的小文件

import os

base_dir = "D:/test"
os.makedirs(base_dir, exist_ok=True)
for i in range(3000):
    with open("{}/{}.txt".format(base_dir, i), "w") as file:
        for j in range(700):
            file.write("A")

然后将test文件夹复制到K230存储卡的SDCARD分区
最后将存储卡插回K230,在IDE里运行下面的脚本,可以看到打印数字的速度越来越慢

import os

base_dir = "/sdcard/test"

def get_file_list(dir_path: str):
    filelist_str = []
    try:
        filelist_byte = os.listdir(dir_path.encode("utf-8"))
        for filename in filelist_byte:
            try:
                filelist_str.append(filename.decode("utf-8"))
            except:
                print("file name decode err " + str(filename))
    except Exception as e:
        print("get file list err " + str(e))
        return []
    return filelist_str


filelist = get_file_list(base_dir)
for i in range(len(filelist)):
# for i n range(int(len(filelist) / 2), len(filelist)):
    with open("{}/{}".format(base_dir, filelist[i]), "r") as file:
        # print(i, len(file.readlines()[0]))
        print(i)

另外如果从文件列表的中间开始打开文件,打开的速度并不会和从头开始一样快,貌似是靠后的文件打开一定会变慢。

硬件板卡


亚博智能K230

软件版本


CanMV_K230_YAHBOOM_micropython_v1.5-legacy-1-g7843f7c_nncase_v2.9.0

你好,我们会来review一下存储这部分的驱动。

0 Answers