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