Amazon S3 PutObject работает очень медленно - PullRequest
7 голосов
/ 24 июля 2011

Я помещаю файлы в хранилище 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 #.Я использую amazon .net SDK.

Размер файла составляет всего 56 КБ, а пропускная способность загрузки равна 1,87 Мбит / с.

Ответы [ 2 ]

9 голосов
/ 04 февраля 2012

Звучит очень похоже на проблему, с которой я столкнулся в последнее время, которая была вызвана настройками автоматического определения прокси в «Свойствах обозревателя» в Windows.

Amazon SDK использует WebRequest для выполнения своих HTTP-запросов и по умолчанию WebRequest придерживается настроек компьютера «Internet Option» для обнаружения локальных прокси. К счастью, WebRequest обладает статическим свойством WebRequest.DefaultWebProxy, которое при значении null удаляет автоматическое определение прокси.

Все, что вам нужно сделать, это установить null, прежде чем начать использовать AmazonS3:

WebRequest.DefaultWebProxy = null; // here

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

[...]

Стоит отметить, что это статическое свойство нужно устанавливать только один раз для каждого домена приложения, а не каждый раз, когда вы хотите создать AmazonS3 объект.

Альтернативный подход:

Если вы не против перенастройки машины, перейдите по адресу:

Windows Control Panel > Internet Options > Connections > Lan Settings

и снимите флажок «Автоматически определять настройки». Если вы используете этот подход, вам вообще не нужно устанавливать свойство DefaultWebProxy.

Дополнительная информация:

Когда я столкнулся с проблемой, я задал следующий вопрос о SO:

Как отключить автоматическое определение прокси в объекте `AmazonS3`?

Здесь есть больше деталей, чем мой ответ, если вам интересно.

4 голосов
/ 05 октября 2015

Вам необходимо изменить BufferSize на AmazonS3Config

var config = new AmazonS3Config
{
    BufferSize = 65536 // 64KB Use a larger buffer size, normally 8K default.
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...