Amazon S3 PutObject非常慢

时间:2011-07-24 17:23:22

标签: c# .net amazon-s3

我使用以下代码将文件放入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。

2 个答案:

答案 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.
};