我正在努力提高 .net 应用程序的上传性能,该应用程序将大型(每个约 15mb)文件组上传到 S3。
我已经调整了多部分选项(线程、块大小等),并且我认为我已经尽可能地改进了这一点,但是在密切关注网络利用率的同时,我注意到了一些意想不到的事情。
我遍历目录中的多个文件,然后使用 S3 传输实用程序的实例提交每个文件以供上传,如下所示:
// prepare the upload
this._transferUtility.S3Client.PutBucket(new PutBucketRequest().WithBucketName(streamingBucket));
request = new TransferUtilityUploadRequest()
.WithBucketName(streamingBucket)
.WithFilePath(streamFile)
.WithKey(targetFile)
.WithTimeout(uploadTimeout)
.WithSubscriber(this.uploadFileProgressCallback);
// start the upload
this._transferUtility.Upload(request);
然后我在上面指定的 uploadFileProgressCallback 中观察这些完成。
但是,当我查看网络接口时,我可以在出站流量图中看到许多明显的“驼峰”,这与我上传到 S3 的文件数量完全一致。
由于这是一个异步调用,我的印象是每次传输都会立即开始,并且随着每次上传完成,我会看到出站数据逐步增加,然后逐步减少。根据我现在看到的情况,我想知道这些请求虽然与调用代码异步,但是否在某处排队,然后连续执行?
如果是这样,我想更改它,以便所有请求都在(接近)同时开始上传,这样我就可以最大化我可用的上传带宽并减少总体执行时间。
我在 S3 .net SDK 文档中四处寻找,但找不到任何提及此排队机制或任何属性/等的内容。这似乎提供了一种增加这些调用的并发性的方法。
任何指针表示赞赏!