← 返回笔记

网络与文件

下载到 100%,为什么还在等

下载进度到 100%,界面却还没显示完成。这一段不一定是网络慢,可能是在校验文件,或者把临时文件放到下载目录。

排查时先看它正在做哪一步。传输、校验、保存分开计时,才知道该改哪里。只盯着下载速度,很容易找错地方。

校验会再读一遍文件

计算完整文件的 SHA-256,需要从头到尾读一遍。文件越大、存储越慢,这一步花的时间就越明显。Windows 下可以拿一个本地文件看看:

Get-FileHash -LiteralPath './video.mp4' -Algorithm SHA256

这条命令不联网,但执行时也会等。它在读磁盘、计算摘要。

在程序里做同样的事,适合按块读取。把几 GB 的文件一次塞进内存没必要。来源有可信的摘要时再比较;如果没有参考值,单独算出一串 SHA-256,也不能说明文件一定正确。

保存有时还要复制一遍

临时文件和目标目录在同一个文件系统里,通常可以直接重命名。如果跨了磁盘或文件系统,就可能需要完整复制,之后再删掉临时文件。

保存到手机系统提供的目录时,也要等文件写入成功。界面上显示「校验中」或「保存中」,比停在 100% 不动容易理解。

要缩短这段等待,先查有没有重复读取、重复复制。校验还没结束,就把任务标成完成,后面出问题反而更难找。

下一篇:点了暂停,界面应该先有反应