Amazon S3 PutObject非常慢

Jef*_*eff 7 .net c# 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();
Run Code Online (Sandbox Code Playgroud)

这段代码是C#.我正在使用亚马逊.net sdk.

该文件的大小仅为56K,我的上传带宽为1.87Mbps.

Inv*_*ion 9

这听起来与我最近遇到的问题非常相似,这是由Windows上"Internet选项"中的自动代理检测设置引起的.

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

您需要做的就是null在开始使用之前将其设置为AmazonS3:

WebRequest.DefaultWebProxy = null; // here

AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretAccessKey);

[...]
Run Code Online (Sandbox Code Playgroud)

值得注意的是,这个静态属性只需要为每个应用程序域设置一次,而不是每次都要创建一个AmazonS3对象.

替代方法:

如果你不介意重新配置机器,那就去:

Windows Control Panel > Internet Options > Connections > Lan Settings
Run Code Online (Sandbox Code Playgroud)

并取消选中"自动检测设置".如果使用此方法,则根本不需要设置DefaultWebProxy属性.

更多信息:

当我遇到这个问题时,我在SO上询问了以下问题:

如何在"AmazonS3"对象中关闭自动代理检测?

如果您感兴趣,它的详细信息比我的答案更多.