2011-07-24 311 views
6

我使用下面的代码将文件放入S3存储中。我发现它非常慢。秒表显示18秒+。任何建议或其他经验?Amazon S3 PutObject速度很慢

 // 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。

+1

有多大,你上传的东西?对于1TB,18将会非常快。 – Mat

+2

该文件有多大,以及您的互联网上传带宽是多少? –

+0

文件为56K,我的带宽为1.5mbps,上传 – Jeff

回答

8

这听起来非常类似于我最近遇到的问题,这是由Windows上“Internet选项”中的自动代理检测设置引起的。

Amazon SDK使用WebRequest发出HTTP请求,默认情况下WebRequest遵守用于检测本地代理的计算机“Internet选项”设置。幸运的是WebRequest有一个静态属性WebRequest.DefaultWebProxy,当它设置为null时,会删除自动代理检测。

所有你需要做的就是它,你开始使用AmazonS3前设置为null

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?

它比这里如果你有兴趣我的回答更多的细节。

+0

也有同样的问题!感谢您的答案 - 这将敲我的计划15秒钟.. – iamserious

+0

@iamserious很高兴它帮助! :) – InvertedAcceleration

3

您需要更改缓冲区大小的AmazonS3Config

var config = new AmazonS3Config 
{ 
    BufferSize = 65536 // 64KB Use a larger buffer size, normally 8K default. 
}; 
+1

我尝试http,multipart,但没有真正把上传速度的主要凹痕像调整BufferSize。 BufferSize将我的上传速度提高了5倍。 – Tim