从 Amazon s3 流读取文本

Rae*_*leh 7 c# readline amazon-s3 streamreader readfile

我使用以下代码从 Amazon S3 读取文本文件,并逐行处理它。这段代码可以工作,但问题是速度很慢。

 GetObjectRequest getObjRequest = new GetObjectRequest()
    .WithBucketName(amazonSettings.BucketName)
    .WithKey(_fileKey);
using (AmazonS3 client = AWSClientFactory.CreateAmazonS3Client(
    amazonSettings.AccessKey, 
    amazonSettings.SecretAccessKey))
using (GetObjectResponse getObjRespone = client.GetObject(getObjRequest))
using (Stream amazonStream = getObjRespone.ResponseStream)
{                        
    StreamReader amazonStreamReader = new StreamReader(amazonStream);
    tempGsContact = new GSContact();
    while ((_fileLine = amazonStreamReader.ReadLine()) != null)
    {
        if (_fileLine.Equals("END:VCARD"))
        {
            // Make process 1
        }
        else if (!_fileLine.Equals(string.Empty))
        {
            //Make process 2
        }
    }                        
}
Run Code Online (Sandbox Code Playgroud)

问题是:我能否得到更充分的方式来降低时间成本?

Rya*_*eir 4

.NET 中的 HTTPWebResponse 也存在类似的性能瓶颈,这可能是他们制作的 AmazonS3 类所包装的。

这是由于对象花费很长时间来解析代理设置造成的,这里列出了一些潜在的解决方案,但最简单的选择可能是将以下内容添加到您的 app.config 文件中:

<system.net>
  <defaultProxy enabled="false">
    <proxy/>
    <bypasslist/>
    <module/>
  </defaultProxy>
</system.net>
Run Code Online (Sandbox Code Playgroud)

或者,您可以在此处替换呼叫:

AWSClientFactory.CreateAmazonS3Client(amazonSettings.AccessKey, amazonSettings.SecretAccessKey)
Run Code Online (Sandbox Code Playgroud)

调用接受第三个参数“AmazonS3Config”的重载,您可以在其中通过“AmazonS3Config.ProxyHost = null”指定空代理 - 这实际上应该与仅针对该请求的上述配置更改相同。