2014-03-13 3 views
1

저는 C# 응용 프로그램에서 S3 서버로 업로드 속도를 다소 높였지만 최대한 최대 크기는 각각 최대 100KB/s의 동시 스트림 2 개입니다. 브라우저에서 최대 1.0 MB/s를 업로드 할 수 있다고 생각하면 좌절감을 느낄 것입니다. 다음은 별도의 스레드에서 호출되는 UploadPartRequest를 사용하는 업로드 코드입니다.Amazon S3 .NET SDK는 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; 
      } 

코드에 문제가있다거나 200 이하/S보다 큰 속도로 C#을 함께 S3에 업로드하는 것은 불가능 : Nevetherless, S3는 두 스레드가 동시에 업로드 할 수 있도록? ks스!

답변

1

아마존 S3가 아닌 "HTTP Two-Connection Limit"때문일 것입니다.

당신은 당신의 app.config 파일에이 구성을 추가하여 변경할 수 있습니다

그냥 시도
<configuration> 
    <system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="20" /> 
    </connectionManagement> 
    </system.net> 
</configuration> 
+0

는 : 완벽하게 작동합니다. 대단히 감사합니다. –