我使用以下代码从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
        }
    }
}


问题是:我可以找到更充分的方法来减少时间成本吗?

最佳答案

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

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

<system.net>
  <defaultProxy enabled="false">
    <proxy/>
    <bypasslist/>
    <module/>
  </defaultProxy>
</system.net>


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

AWSClientFactory.CreateAmazonS3Client(amazonSettings.AccessKey, amazonSettings.SecretAccessKey)


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

08-07 17:49