.net Amazon S3 PutObject非常慢

4ioopgfo  于 2022-12-14  发布在  .NET
关注(0)|答案(3)|浏览(350)

我正在使用下面的代码将文件放入一个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。

72qzrwbm

72qzrwbm1#

这听起来很像我最近遇到的一个问题,是由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?
如果你感兴趣的话,它比我的答案更详细。

zzlelutf

zzlelutf2#

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

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

g6ll5ycj3#

我的最新项目是基于**.Net 6AWSSDK.S3**Nuget包构建的。
应用程序启动速度极快,但第一次使用/示例创建(通过注入)大约需要8到10秒。
对我来说,成功的秘诀是在Program.cs中设置DefaultConfigurationMode

var awsOptions = builder.Configuration.GetAWSOptions();
awsOptions.DefaultConfigurationMode = DefaultConfigurationMode.Standard;

[...]

builder.Services.AddDefaultAWSOptions(awsOptions);
builder.Services.AddAWSService<IAmazonS3>();

希望这对以后的人有帮助!

相关问题