V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
imn1
V2EX  ›  问与答

这两种代码方案哪个更快一些

  •  
  •   imn1 · 2018-06-25 14:59:35 +08:00 · 1185 次点击
    这是一个创建于 2336 天前的主题,其中的信息可能已经有所发展或是发生改变。
    仅指理论上,速度优先于内存
    递归目录树,符合过滤规则的,进行操作,过滤规则有多条(很可能是正则),对应不同操作
    1.递归一个目录树,返回全部 dir/file 的 fullpath --> list
    然后依据过滤器,过滤出符合的,再迭代操作
    2.一边递归一边判断过滤规则并操作

    暂时不考虑目录树内文件变化的情况(复制、删除、移动、改名),也就是只读
    有变化也只能用后者吧?
    另外也要考虑将来过滤规则变化,代码改动少的情况
    5 条回复    2018-06-25 17:39:24 +08:00
    clino
        1
    clino  
       2018-06-25 15:23:39 +08:00   ❤️ 1
    第二种如果能用到多核有可能会比较快

    另外过滤规则有多条的话,建议看能不能合并成一个正则这样应该能提升效率
    herozhang
        2
    herozhang  
       2018-06-25 15:28:08 +08:00   ❤️ 1
    CPU 速度远快于 IO,所以应该优先解决 IO 问题。
    然后就是一个 IO 调度的问题了,如果能把不同目录分布到不同存储器上,或者文件系统本身提供目录结构的元数据是最好的了。
    imn1
        3
    imn1  
    OP
       2018-06-25 15:56:25 +08:00
    @clino
    对应操作不同,不能合并

    @herozhang
    道理知道,那应该是第一种吧?尽快结束 getfileinfo 的操作,不用等处理操作完成再 next
    luoway
        4
    luoway  
       2018-06-25 16:42:37 +08:00   ❤️ 1
    第二种更快吧
    按 #2 说的,第一种 IO 时间 CPU 空闲着
    clino
        5
    clino  
       2018-06-25 17:39:24 +08:00   ❤️ 1
    @imn1 #3
    我以前做过一个将多条正则规则合并成一个,每一条给一个标识符,识别出来以后能够根据标识符来对应识别到的是哪一条来针对做处理
    用到的正则语法可以参考在 https://docs.python.org/2/library/re.html 里搜索 (?P<name>...)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1443 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 17:42 · PVG 01:42 · LAX 09:42 · JFK 12:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.