我使用以下代码从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”指定空代理-这实际上应仅与该请求的上述配置更改相同。