我使用以下代码将文件放入S3存储。我发现它非常慢。秒表显示18秒+。任何建议或其他经历?
// upload the file to S3
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretAccessKey);
PutObjectRequest request = new PutObjectRequest();
FileStream fs = new FileStream(sourceFileName, FileMode.Open);
request.WithInputStream(fs);
request.WithBucketName(bucketName);
request.WithKey(keyName);
Stopwatch stp1 = new Stopwatch();
stp1.Start();
client.PutObject(request);
stp1.Stop();
fs.Close();
此代码为C#。我正在使用亚马逊.net sdk。
该文件的大小仅为56K,我的上传带宽为1.87Mbps。
答案 0 :(得分:9)
这听起来与我最近遇到的问题非常相似,这是由Windows上“Internet选项”中的自动代理检测设置引起的。
亚马逊SDK使用WebRequest
来发出HTTP请求,默认情况下WebRequest
遵守用于检测本地代理的计算机“Internet选项”设置。幸运的是,WebRequest
有一个静态属性WebRequest.DefaultWebProxy
,当设置为null
时,会删除自动代理检测。
在开始使用null
之前,您只需将其设为AmazonS3
:
WebRequest.DefaultWebProxy = null; // here
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretAccessKey);
[...]
值得注意的是,这个静态属性只需要为每个应用程序域设置一次,而不是每次都要创建AmazonS3
对象。
替代方法:
如果您不介意重新配置机器,请转到:
Windows Control Panel > Internet Options > Connections > Lan Settings
并取消选中“自动检测设置”。如果使用此方法,则根本不需要设置DefaultWebProxy
属性。
更多信息:
当我遇到这个问题时,我在SO上询问了以下问题:
How to turn off the automatic proxy detection in the `AmazonS3` object?
如果您感兴趣,它的详细信息比我的回答更多。
答案 1 :(得分:4)
您需要更改AmazonS3Config上的BufferSize
var config = new AmazonS3Config
{
BufferSize = 65536 // 64KB Use a larger buffer size, normally 8K default.
};