V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AOK123
V2EX  ›  Windows

Windows 操作大量文件速度比 Linux 慢很多

  •  1
     
  •   AOK123 · 2023-04-03 15:45:39 +08:00 · 7520 次点击
    这是一个创建于 598 天前的主题,其中的信息可能已经有所发展或是发生改变。
    同一个 Python 脚本,把约 100 张高清图片分成大约 30W 个小 patch 并保存,WSL 上运行速度比 Win 快至少 10 倍
    在删除时候也是,WSL 上几秒钟的事(rm -rf),Windows 要几分钟(shift + delete)
    这是什么原因?
    52 条回复    2023-04-05 10:59:26 +08:00
    mxT52CRuqR6o5
        1
    mxT52CRuqR6o5  
       2023-04-03 15:47:23 +08:00
    ntfs 的问题
    AOK123
        2
    AOK123  
    OP
       2023-04-03 15:51:53 +08:00
    @mxT52CRuqR6o5 感谢,但我不是很懂文件系统,有个疑问:WSL 也是装在同一个硬盘上的,应该也是 ntfs 吧?
    codehz
        3
    codehz  
       2023-04-03 15:57:35 +08:00 via iPhone
    杀毒软件扫描文件的问题,每次创建 /打开 /写入文件都要过一个文件系统过滤器然后才会返回程序
    Eiden
        4
    Eiden  
       2023-04-03 16:03:07 +08:00
    如果你说的 wsl 是指 wsl2 的话, wsl2 是虚拟机, 文件系统不是 ntfs
    busier
        5
    busier  
       2023-04-03 16:03:41 +08:00
    杀毒软件的锅,禁用杀毒软件(包括自带的)就会快很多!另外 Windows 删除目录也会先扫描目录结构,然后在删除!
    如果删除大量文件,还不如 cmd 里面 rd /s 来的快!
    coderluan
        6
    coderluan  
       2023-04-03 16:06:47 +08:00
    python 没代码不确定。但是删除那个,你不能拿 cli 和 gui 比啊,(rm -rf) 得和(del /s)比才公平,
    marcong95
        7
    marcong95  
       2023-04-03 16:08:09 +08:00
    你要对比 rm -rf 的话,为何不对比 Windows 下对应的指令呢,例如 powershell 下 Remove-Item -Recurse -Force <路径>

    迫于 npm/node_modules 经常需要删除超大量文件,GUI 下的删除即便是 Shift + Delete 可能也有大量需要预处理的情况,主观感觉用指令会快一点
    FozillaMox
        8
    FozillaMox  
       2023-04-03 16:10:17 +08:00 via iPhone
    同感。我分别用 Windows 和 macOS 对同一台文件系统为 FAT32 的设备进行文件操作,Windows 下就连简单的复制粘贴都比 macOS 慢很多。
    encro
        9
    encro  
       2023-04-03 16:10:26 +08:00
    用界面要统计进度和空间,如果很多小文件,那么会慢。

    而且杀毒软件确实非常大影响。
    0attocs
        10
    0attocs  
       2023-04-03 16:23:22 +08:00 via iPhone
    还有 explorer.exe 本身的效率问题,加载的插件和层层逻辑太多了。
    cwcc
        11
    cwcc  
       2023-04-03 16:29:29 +08:00
    WSL2 的话,Linux 的文件会保存到 VHDX 虚拟硬盘中。
    如果将文件放入虚拟硬盘中且同时用 WSL2 操作文件,效率会高很多。
    如果将文件放在 Windows 的硬盘分区中,操作是走网络挂载会影响性能。
    如果是 Windows 操作 WSL2 内的文件,也是走的网络挂载,性能可能被 Windows 的杀毒软件和多系统之间的 IO 影响。
    如果是 Windows 操作 Windows 的文件,有 GUI 也会影响性能,有时候 Explorer 卡住了也会导致无法正常满速传输。
    mmdsun
        12
    mmdsun  
       2023-04-03 16:30:33 +08:00   ❤️ 13
    Windows 复制、拷贝、粘贴批量文件都会很慢。
    之前问微软的人,说是加这个暂停功能的原因。
    你甚至可以暂停后,把 U 盘、磁盘拔出来,再插回去进去点继续,传输进度还不会丢失。





    用 rebocopy 命令会快很多。
    NessajCN
        13
    NessajCN  
       2023-04-03 16:35:26 +08:00
    @marcong95 很认真地说,我认为对比指令执行速度时必须包括敲这些指令的时间。更极端一点,还应该比较记住并能熟练使用这些指令的时间......
    em70
        14
    em70  
       2023-04-03 16:39:04 +08:00
    命令行跟 GUI 比速度? linux 用 FTP 客户端删除,一样慢死,这是 GUI 需要处理过多消息的缘故,你用 cmd 跟 shell 速度一样的
    aptupdate
        15
    aptupdate  
       2023-04-03 16:43:16 +08:00 via iPhone
    @mmdsun 长知识了……
    一直认为那个暂停功能没什么鸟用,谁会复制到一半暂停啊。。。
    woyaoying
        16
    woyaoying  
       2023-04-03 16:45:08 +08:00   ❤️ 1
    禁止 windows 杀毒实时扫描
    lisxour
        17
    lisxour  
       2023-04-03 16:52:43 +08:00   ❤️ 1
    @aptupdate 然而暂停功能是真的难用,你拷大文件或者超多文件时,你一点暂停,运气好卡几分钟,运气不好,无限期卡住,重新开始传输也是
    Kiriya
        18
    Kiriya  
       2023-04-03 16:56:44 +08:00
    windows 在操作大量文件时会先统计文件数量及文件大小,这会浪费大量时间,所以 Windows 移动复制删除大量文件推荐使用 fastcopy 替代资源管理器,可以省略统计文件大小所浪费的时间
    kkocdko
        19
    kkocdko  
       2023-04-03 17:01:14 +08:00
    虽然很多人确实不知道这件事,但是你的问题无论是用 New Bing 还是传统的搜索引擎,都能得到正确答案。
    PrinceofInj
        20
    PrinceofInj  
       2023-04-03 18:46:09 +08:00
    @mmdsun 这个暂停挺好用的。有时候从 U 盘上拷东西开始拷贝后才发现是 2.0 的口,暂停一下,插到 3.0 得上,然后继续,速度刷的一下子就上去了,超好用。
    0attocs
        21
    0attocs  
       2023-04-03 18:57:23 +08:00 via iPhone
    @NessajCN
    pwsh 可以说是非常现代非常易用的 shell 了,且不说类似 fish/zsh 的 tab 补全和提示,pwsh 的函数 /cmdlet 是可以自动提示 /补全 /预测参数的,而且 pwsh 不区分大小写,常用命令都有 alias ,参数按前缀匹配,这一条命令纯手打也就是 rm -r -fo 。
    0attocs
        22
    0attocs  
       2023-04-03 19:04:31 +08:00 via iPhone
    @NessajCN
    要比较学习曲线的话,pwsh 首先文档齐全,其次 verb-noun 的全名绝对更好记,加上 tab 提示 /补全,函数名 alias ,参数名前缀匹配,-?帮助,现代化的语法和语言特性,绝对是更好学的那个。
    newmlp
        23
    newmlp  
       2023-04-03 19:09:34 +08:00
    你在 Windows 下用命令删除文件和目录也可以秒删
    newmlp
        24
    newmlp  
       2023-04-03 20:36:43 +08:00
    @mxT52CRuqR6o5 和文件系统没多大关系,系统 api 具体实现不同
    newmlp
        25
    newmlp  
       2023-04-03 20:38:39 +08:00
    @Eiden 虚拟机的文件系统不还是存在 ntfs 文件系统上的么,没道理虚拟机的性能比物理机还好吧[二哈]
    mxT52CRuqR6o5
        26
    mxT52CRuqR6o5  
       2023-04-03 20:53:33 +08:00
    @newmlp 前端开发表示并不能,同一个项目,在 windows host 上删除 node_module 还没有在 windows host 下虚拟的黑苹果 guest 系统里删的快
    newmlp
        27
    newmlp  
       2023-04-03 21:12:37 +08:00
    @mxT52CRuqR6o5 为什么我这里的 Windows 用 rmdir 能秒删 node_module 呢[二哈]有没有可能是不是你不会删
    BrettD
        28
    BrettD  
       2023-04-03 21:27:41 +08:00
    @newmlp VHDX 就一个文件,直接在 NTFS 里面操作就是操作很多个文件
    Chipmunker
        29
    Chipmunker  
       2023-04-03 21:39:39 +08:00
    @0attocs pwsh 启动太慢了。
    mxT52CRuqR6o5
        30
    mxT52CRuqR6o5  
       2023-04-03 21:43:34 +08:00 via Android
    @newmlp
    有没有可能是你文件不够多,硬盘性能不够差呢
    都是秒删说明你根本没撞到性能瓶颈,你的 case 压根就不能作为参考
    justaname
        31
    justaname  
       2023-04-03 22:07:59 +08:00 via iPhone
    @0attocs 至少对我来说我觉得 bash 以及 gnu 相关的那一套命令好学很多,pwsh 的面向对象设计经常用起来很难受……我需要查文档才知道具体应该怎么调用和控制对象,如果有外部命令需要交互的话那就更是乱成一团。相反 Linux shell 的设计逻辑就是字符串流,在大部分需要脚本解决的任务上我觉得方便很多
    lusi1990
        32
    lusi1990  
       2023-04-03 22:42:51 +08:00
    都用命令操作, window 也慢. 文件系统的原因
    wisetc
        33
    wisetc  
       2023-04-03 22:52:22 +08:00 via iPhone
    问题存在,我也有类似的疑惑
    Donahue
        34
    Donahue  
       2023-04-03 23:46:27 +08:00
    很久没用过 windows 了哈哈,这个系统用来编程感觉挺蛋疼的
    est
        35
    est  
       2023-04-03 23:55:04 +08:00
    因为 explorer.exe 是三哥写的 shell 。。你试试命令行 rd /s /q C: 看看快不快。
    est
        36
    est  
       2023-04-03 23:55:42 +08:00
    @est 提示:rd 命令有风险。请谨慎执行。
    0attocs
        37
    0attocs  
       2023-04-04 05:27:24 +08:00
    @Chipmunker #22 这个不可避免吧,我配置好的 zsh 甚至 bash 启动和 pwsh 差不多慢,pwsh 无配置启动(-nop )也挺快的。
    0attocs
        38
    0attocs  
       2023-04-04 05:38:05 +08:00
    @justaname #23
    前面提到的也都是在 windows 下用 pwsh 。你如果说的是在 linux 下的话,在 gnu 的环境里当然是 bash 更搭,但学习记忆曲线还是不低的。想用 pwsh 在 linux 下做交互确实是要学习那一套 best practice ,我也尽量不碰,只是偶尔用 pwsh 做一些简单的 parallel processing 。
    rm0gang0rf
        39
    rm0gang0rf  
       2023-04-04 09:18:06 +08:00
    用 c 试试?
    yolee599
        40
    yolee599  
       2023-04-04 09:20:52 +08:00 via Android
    因为还要计算进度条用来显示
    [有进度条反而速度更慢?有关进度条你不知道的秘密-哔哩哔哩] https://b23.tv/qPT3XzL
    Huelse
        41
    Huelse  
       2023-04-04 09:21:57 +08:00
    NTFS 文件系统有啥问题?这个文件系统微软用了多少年了,期间 linux 都换了不知道多少个文件系统
    newmlp
        42
    newmlp  
       2023-04-04 09:33:41 +08:00
    @mxT52CRuqR6o5 我可用是机械硬盘。。。。
    newmlp
        43
    newmlp  
       2023-04-04 09:34:10 +08:00   ❤️ 1
    @BrettD 你对文件系统一无所知
    kindjeff
        44
    kindjeff  
       2023-04-04 09:44:24 +08:00
    文件放在哪,wsl2 和 win 宿主机互相之间访问都要走网络奥
    mscsky
        45
    mscsky  
       2023-04-04 11:24:54 +08:00
    有没有可能 Windows 也能用命令行删除
    jacy
        46
    jacy  
       2023-04-04 11:44:48 +08:00
    把 windows defender 关掉
    BrettD
        47
    BrettD  
       2023-04-04 12:30:25 +08:00 via iPhone
    @newmlp 那为什么在 WSL 里面 git checkout 一个大仓库,比如 LLVM ,比在 Windows 里面直接在 NTFS 上 checkout ,只需要接近一半时间?
    newmlp
        48
    newmlp  
       2023-04-04 12:41:56 +08:00
    @BrettD 原因有很多,我甚至可以认为网络环境不一样,但是你非要说和文件系统有关系,那似乎我也无法反驳,因为你这个简单的对比中不可控的变量太多了
    BrettD
        49
    BrettD  
       2023-04-04 12:44:29 +08:00 via iPhone
    @newmlp 对比方式是先把一样的仓库 clone 下来,然后比较的是从一个 tag checkout 到另一个 tag 的时间,整个过程是全本地的文件操作。我的印象就是 NTFS 操作大量小文件的效率非常低。VHDX 就是一个文件,所以没有这些在 NTFS 操作大量小文件的瓶颈。
    Yeen
        50
    Yeen  
       2023-04-04 15:12:50 +08:00
    建议写 C++代码,直接调用系统 api 操作。
    sadfQED2
        51
    sadfQED2  
       2023-04-04 15:19:23 +08:00 via Android
    @mmdsun 卧槽,长知识了,这暂停还能拔 u 盘啊。用这么多年电脑,都没点过暂停
    jack1998
        52
    jack1998  
       2023-04-05 10:59:26 +08:00
    @sadfQED2 同没用过,长知识了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1107 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:52 · PVG 06:52 · LAX 14:52 · JFK 17:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.