Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用线程池复制100.000个文件_C#_Multithreading_Threadpool - Fatal编程技术网

C# 使用线程池复制100.000个文件

C# 使用线程池复制100.000个文件,c#,multithreading,threadpool,C#,Multithreading,Threadpool,我必须以最快的方式复制文件。 使用ThreadPool是一个好主意吗 我能把这么多东西排队吗 有更好的解决办法吗 更新 我想复制到不同的网络位置(随机)。您将受到IO限制,而不是CPU限制。。。在这里使用多个线程没有多大意义。这实际上可能会使事情变得更慢(特别是在旋转磁盘上-您将增加寻道时间并降低缓冲区效率)。依我看,您最好在一个后台线程上顺序处理它们。您将受到IO约束,而不是CPU约束。。。在这里使用多个线程没有多大意义。这实际上可能会使事情变得更慢(特别是在旋转磁盘上-您将增加寻道时间并降低

我必须以最快的方式复制文件。 使用
ThreadPool
是一个好主意吗

我能把这么多东西排队吗

有更好的解决办法吗

更新
我想复制到不同的网络位置(随机)。

您将受到IO限制,而不是CPU限制。。。在这里使用多个线程没有多大意义。这实际上可能会使事情变得更慢(特别是在旋转磁盘上-您将增加寻道时间并降低缓冲区效率)。依我看,您最好在一个后台线程上顺序处理它们。

您将受到IO约束,而不是CPU约束。。。在这里使用多个线程没有多大意义。这实际上可能会使事情变得更慢(特别是在旋转磁盘上-您将增加寻道时间并降低缓冲区效率)。依我看,您也可以在单个后台线程上顺序处理这些文件。

如果文件被复制到相同的目标磁盘/网络位置或从相同的源磁盘/网络位置,那么瓶颈将是数据读/写,而不是CPU,因此,使用多个线程是没有用的。

如果文件被复制到相同的目标磁盘/网络位置,或者从相同的源磁盘/网络位置复制,那么瓶颈将是数据读/写,而不是CPU,因此使用多个线程是没有用的。

是的,如果目标目标通过网络连接,多个线程或异步线程池肯定会加快整个传输速度,特别是如果“数千个文件”足够小,以至于建立连接的延迟占传输时间的很大一部分

您应该配置传输任务/线程的数量,以便根据可用的网络资源调整系统。以自适应、自动化的方式这样做将是一个有趣的练习:)


仅使用一个线程/异步任务将导致真正糟糕的性能,特别是对于带宽高但延迟高的链路,其中每个文件的连接设置时间非常重要-网络将严重不足。

是的,如果目标目标通过网络连接,多个线程或异步线程池肯定会加快整个传输速度,特别是如果“数千个文件”足够小,以至于建立连接的延迟占传输时间的很大一部分

您应该配置传输任务/线程的数量,以便根据可用的网络资源调整系统。以自适应、自动化的方式这样做将是一个有趣的练习:)


仅使用一个线程/异步任务将导致真正糟糕的性能,特别是对于带宽高但延迟高的链路,其中每个文件的连接设置时间非常重要-网络将严重不足。

如果要将文件写入单个物理驱动器,这是毫无意义的;如果你打算同时有许多实际接受者,这是个好主意。从提供的详细信息无法判断。我复制到许多其他网络位置。@dknaack随更新:您是如何编写/复制的?同样,这仍然是大量的IO限制-甚至更是如此(CPU在本地磁盘上运行几圈,而本地磁盘可以在网络上运行几圈);您是否正在将相同的数据复制到所有位置?不,我有一个源服务器,具有多个磁盘的高性能RAID。我需要将所有文件复制到其他服务器。我选择一个文件,然后随机选择另一个目标服务器。我希望尽可能保持复制速率不变。@dknack-多个冗余备份?如果要将文件写入单个物理驱动器,则没有意义;如果你打算同时有许多实际接受者,这是个好主意。从提供的详细信息无法判断。我复制到许多其他网络位置。@dknaack随更新:您是如何编写/复制的?同样,这仍然是大量的IO限制-甚至更是如此(CPU在本地磁盘上运行几圈,而本地磁盘可以在网络上运行几圈);您是否正在将相同的数据复制到所有位置?不,我有一个源服务器,具有多个磁盘的高性能RAID。我需要将所有文件复制到其他服务器。我选择一个文件,然后随机选择另一个目标服务器。我希望复制速率尽可能保持恒定。@dknaack-多个冗余备份?您应该再试一次-使用一个具有16 GB缓存和/或SSD的现代磁盘。我不是说我也试过,我对结果感兴趣。对于同一个盒子上的磁盘,您可能是对的(我们现在知道,这不是OP的情况)。是的,OP可以尝试一下。您应该再试一次-使用一个具有16 GB缓存和/或SSD的现代磁盘。我不是说我也试过,我对结果感兴趣。对于同一个盒子上的磁盘,您很可能是对的(我们现在知道,这不是OP的情况)。是的,OP可以尝试一下。@MartinJames yes;不是“今天”,但也不是很久以前;嘿@马丁尼:是的;不是“今天”,但也不是很久以前;嘿!