io.readfile,几百个小文件的时候,很慢很慢。

场景需求:必须确保离线下功能正常。因此,把所有数据点同步至模组中。数据点每个46byte。。计算过,存放2000左右内存是够用的。内存大小符合要求。

存放规则:key(文件名)+数据点内容(46byte),每个数据点产生一个小文件。  

              (如果都存放在一个文件中,在同步时(同步不是一次存放,是零散存放的CURD)特别的慢。每次需要一次读取出所有来进行CURD,这非常耗运行内存,所以没用)

现象: 当存放400个数据点小文件后,最先加载的数据点read很快,后面加载的数据点,很慢(大约2~4秒),最慢的是看见超过4s的。存储写入文件时基本2s~4s。。。


问题:如何加快这个速度?  这个io.readfle,为啥这么慢?有没有方法加快?需要1s内完成。


使用模组:Air720G


代码参考:

functionreadfile(filename)--打开指定文件并输出内容
local filehandle=io.open(filename,"r")--第一个参数是文件名,第二个是打开方式,'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then--判断文件是否存在
local fileval=filehandle:read("*all")--读出文件内容
if fileval then
filehandle:close()--关闭文件
return fileval
else
log.info(filename,"文件为空")--文件不存在
end
else
log.info(filename,"文件不存在或文件输入格式不正确") --打开失败
end

return""
end


functionwritevalw(filename,value)--在指定文件中添加内容
local filehandle =io.open(filename,"w")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
filehandle:write(value)--写入要写入的内容
filehandle:close()
returntrue
else
print("文件不存在或文件输入格式不正确") --打开失败
end

returntrue
end


functiondeletefile(filename)--删除指定文件夹中的所有内容
if io.exists(filename) then
os.remove(filename)
end
end


functionfile_exists(filename)
local file =io.open(filename, "rb")
if file then file:close() end
return file ~=nil
-- return io.exists(filename)
end




请先 登录 后评论

1 个回答

晨旭 - 菜鸟

如果大数据量,建议存到外置flash中,以免模块存满导致死机

请先 登录 后评论
  • 1 关注
  • 0 收藏,2433 浏览
  • toqo 提出于 2019-08-02 11:10

相似问题