代码之家  ›  专栏  ›  技术社区  ›  Hiyasat

使用多线程以块形式发送文件

  •  0
  • Hiyasat  · 技术社区  · 15 年前

    我想通过调用一个使用多线程调用WebService的函数以块的形式发送一个文件。

    以下是代码简介:

    int chunkSize = "whatever in byte";
    byte[] fileBytes = ConvFileToByte("the pathe of the file");
    int numberOfParts = (int)Math.Ceiling((decimal)fileSize / chunkSize);
    for (int i; i< numberOfParts; i++)
    {
      //Get the offset.
      //Get the bytes to send.
    
      SendFile(ByteToSend, offset) // This call a method in a webservice.
    }
    

    在这个函数中使用多线程的最佳方法是什么?

    注意:但不要忘记,如果一个块发送失败,我应该再次发送。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Manu JCasso    15 年前

    除非您在某种负载平衡下有多个WebService实例,并且您的上载带宽高于每个服务主机的下载能力,否则如果您希望实现更高的上载速度,多线程调用是没有意义的。

    另一方面,如果要上载的文件非常大,并且要限制用于缓冲文件的内存量,则分块是有意义的。如果这是您的情况,并且您可以控制WebService实现,那么应该考虑使用 WCF chunking 而不是编写自己的分块机制。

        2
  •  1
  •   Community CDub    8 年前

    如果您的Web服务安全地接收到无序的块,请考虑使用 ThreadPool 类(请参见下面的一个很好的示例: VB.Net Threading )您将能够设置并行线程的数量等。

    可以在上载单个块的函数内部重新发送。例如,如果请求失败(无法从服务器获得“200”响应),则需要重新启动(必须计算重试次数,否则可能会出现ifinite循环)。