Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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# 如何在C中下载具有多线程的单个文件#_C#_Multithreading - Fatal编程技术网

C# 如何在C中下载具有多线程的单个文件#

C# 如何在C中下载具有多线程的单个文件#,c#,multithreading,C#,Multithreading,我想在C#中下载一个带有多线程的文件。 例如: Thread1开始从1%下载到40%。 Thread2开始从41%下载到70%。 Thread3开始从71%下载到100% 请给我一些代码。提前感谢您可以使用。将每个部分下载到单独的文件中,完成后将其合并(以避免多线程问题) 更新 最简单的方法是每个线程使用一个HttpWebRequest。请在此处阅读答案: 要合并文件,只需按顺序读取它们并写入新文件(使用FileStreamclass)使用HttpRequest类,调用AddRange方法如何。

我想在C#中下载一个带有多线程的文件。 例如: Thread1开始从1%下载到40%。 Thread2开始从41%下载到70%。 Thread3开始从71%下载到100%

请给我一些代码。提前感谢

您可以使用。将每个部分下载到单独的文件中,完成后将其合并(以避免多线程问题)

更新

最简单的方法是每个线程使用一个
HttpWebRequest
。请在此处阅读答案:


要合并文件,只需按顺序读取它们并写入新文件(使用
FileStream
class)

使用HttpRequest类,调用AddRange方法如何。这应该是一个带有开始下载的偏移量的标题

    var request = HttpWebRequest.Create(new Uri("http://www.myurl.com/hugefile"));

    request.Method = "GET";
    request.AddRange(offset_for_this_thread);  // I assume you have calculated this
                                               // before firing threads
    Stream reponseStream = request.GetResponse().GetResponseStream();
然后,您可以从“responseStream”读取数据,并在完成后将其与其他线程合并

然而,正如大家所注意到的,只有当您有两个适配器,都连接到internet,并且这些适配器之间有某种带宽平衡时,这才会带来价值。。。否则Windows可能会将所有内容转移到同一连接。

只允许您下载范围。这将设置范围HTTP头字段,该字段将告诉服务器您只对某个范围感兴趣。允许多个范围


有些人提到这种方法没有用处,只会增加开销。依情况而定,它们的服务器每次连接的速度仅为X。有些将在IP上过滤,而另一些仅在活动连接上过滤。因此,在某些情况下,您的方案会起作用。

您的网络连接是否已充分使用?如果是这样的话,你就不能用多个线程来加快下载速度。这是没有帮助的。这只会增加开销。为什么假设客户端/带宽是问题所在?如果web服务器使用某种节流功能,而不检查多个连接是否来自同一个客户端,则它会有所帮助。@NicholasButler它会有所帮助,因为服务器仅以X速度对每个连接进行种子植入。