我在想......
在I / O操作中使用c#进行多线程处理(假设从c :\1\
复制许多文件到c:\2\
)会有性能差异而不是执行操作 - 顺序吗?
我与自己斗争的原因是最终的IO操作 - 是一个必须做的工作。所以,即使我并行工作 - 他仍然会按顺序执行这些复制命令......
或者我的假设是错的?
在这种情况下,使用多线程副本有什么好处:
感谢
答案 0 :(得分:3)
与其他人一样,必须根据具体的应用环境进行衡量。
但是我想引起人们的注意。 每次复制文件时,都会检查对目标位置的写访问权限,这很慢。
当我们必须复制/粘贴一系列已经压缩的文件时,我们都遇到了一个案例,如果你再次压缩成一个大的 ZIP 文件,那么总的压缩大小并不显着小于所有内容的总和,IO操作将以更快的方式执行。 (试试吧,你会看到一个巨大的差异,如果你之前没有这样做的话)。
所以我假设(再次必须在具体系统上进行测量,我只是猜测)在一个磁盘上写一个大文件,将会更快的很多小文件。
希望这有帮助。
答案 1 :(得分:3)
对文件进行多线程处理并不是关于CPU而是关于IO。这意味着适用完全不同的规则。不同的设备具有不同的特征:
答案 2 :(得分:2)
我不是硬盘相关问题的专家,但也许这会为你带来一些亮点:
Windows正在使用NTFS文件系统。这个系统不会“喜欢”太多小文件,例如1kb文件下。它将“神奇地”制作100个1kb重量400kb而不是100kb的文件。处理很多“小”文件时,它也非常慢。因此,复制一个大文件而不是相同重量的许多小文件会快得多。
另外,根据我的个人经验和知识,多线程不会加速复制许多文件,因为实际的硬件磁盘就像一个单元一样,并且不能通过同时发送许多请求加速(它将逐个处理它们。)