Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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# AmazonS3.NETSDK只能通过2个流进行上传_C#_Amazon Web Services_Upload_Amazon S3_Multipart - Fatal编程技术网

C# AmazonS3.NETSDK只能通过2个流进行上传

C# AmazonS3.NETSDK只能通过2个流进行上传,c#,amazon-web-services,upload,amazon-s3,multipart,C#,Amazon Web Services,Upload,Amazon S3,Multipart,一段时间以来,我一直在努力提高从我的c#应用程序上传到S3服务器的速度,但我得到的最大值是两个同步流,每个流速度高达100kb/s。考虑到在浏览器中最多可以上传1.0 MB/s,这可能会让人沮丧。这是我的上传代码,它使用UploadPartRequest,在单独的线程中调用。无论如何,S3只允许同时上载2个线程: List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();

一段时间以来,我一直在努力提高从我的c#应用程序上传到S3服务器的速度,但我得到的最大值是两个同步流,每个流速度高达100kb/s。考虑到在浏览器中最多可以上传1.0 MB/s,这可能会让人沮丧。这是我的上传代码,它使用UploadPartRequest,在单独的线程中调用。无论如何,S3只允许同时上载2个线程:

List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
        List<Thread> uploadThreads = new List<Thread>();

        InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
        {
            BucketName = BucketName,
            Key = result
        };

        InitiateMultipartUploadResponse initResponse = _S3client.InitiateMultipartUpload(initiateRequest);
        _curContentLength = new FileInfo(pathToResult + result).Length;
        long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB

          long filePosition = 0;
          for (int i = 1; filePosition < _curContentLength; i++)
          {
              if ( filePosition + partSize > _curContentLength )
              {
                  partSize = _curContentLength - filePosition;
              }
              UploadPartRequest uploadRequest = new UploadPartRequest
                  {
                      BucketName = BucketName,
                      UploadId = initResponse.UploadId,
                      PartNumber = i,
                      PartSize = partSize,
                      FilePosition = filePosition,
                      Key = result,
                FilePath = (pathToResult + result)
                  };

                  uploadRequest.StreamTransferProgress += uploadFileProgressCallback;

                  // Upload part and add response to our list.

                  Thread t = new Thread(() => uploadResponses.Add(_S3client.UploadPart(uploadRequest)));
                  t.Start();
                  uploadThreads.Add(t);
                  filePosition += partSize;
              }

              foreach (var uploadThread in uploadThreads)
              {
                  uploadThread.Join();
              }

              // Step 3: complete.
              CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
                  {
                      BucketName = BucketName,
                      UploadId = initResponse.UploadId,
                      Key = result
                      //,PartETags = new List<PartETag>(uploadResponses)

                  };
              completeRequest.AddPartETags(uploadResponses);
              _S3client.CompleteMultipartUpload(completeRequest);
              _systemEnable = true;
              WriteLineToLog("Успешно залил ролик на S3!", intId);
              break;
          }
List uploadResponses=new List();
List uploadThreads=new List();
InitiateMultipartUploadRequest initiateRequest=新的InitiateMultipartUploadRequest
{
BucketName=BucketName,
键=结果
};
InitiateMultipartUploadResponse initResponse=\u S3client.InitiateMultipartUpload(initiateRequest);
_curContentLength=新文件信息(pathToResult+结果);
长零件尺寸=5*(长)数学功率(2,20);//5 MB
长文件位置=0;
对于(int i=1;filePosition<\u curContentLength;i++)
{
如果(文件位置+零件尺寸>\u内容长度)
{
partSize=\u curContentLength-filePosition;
}
UploadPartRequest uploadRequest=新的UploadPartRequest
{
BucketName=BucketName,
UploadId=initResponse.UploadId,
零件号=i,
零件尺寸=零件尺寸,
FilePosition=FilePosition,
键=结果,
文件路径=(路径结果+结果)
};
uploadRequest.StreamTransferProgress+=uploadFileProgressCallback;
//上传部分并将响应添加到我们的列表中。
线程t=新线程(()=>uploadResponses.Add(S3client.UploadPart(uploadRequest));
t、 Start();
上传线程。添加(t);
filePosition+=零件尺寸;
}
foreach(uploadThreads中的var uploadThread)
{
uploadThread.Join();
}
//第三步:完成。
CompleteMultipPartUploadRequest completeRequest=新的CompleteMultipPartUploadRequest
{
BucketName=BucketName,
UploadId=initResponse.UploadId,
键=结果
//,PartETags=新列表(上传响应)
};
AddParteTag(上传响应);
_S3client.CompleteMultipartUpload(completeRequest);
_systemEnable=true;
书面日志(“УСПзззззззззззззззз;
打破
}

代码是否有问题,或者无法以大于200 KB/s的速度用c#上传到s3?Thnks

我认为这个问题不是来自AmazonS3,只是因为“HTTP两个连接限制”

您可以通过将此配置添加到app.config文件来更改它:

<configuration>  
  <system.net>
    <connectionManagement>
       <add address="*" maxconnection="20" />
    </connectionManagement>
  </system.net>
</configuration>