2011-07-24 45 views
6

Estoy colocando archivos en un almacenamiento S3 usando el siguiente código. Estoy descubriendo que es extremadamente lento. El cronómetro indicaba 18 segundos +. ¿Alguna sugerencia u otras experiencias?Amazon S3 PutObject es muy lento

 // 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(); 

Este código es C#. Estoy usando amazon .net sdk.

El archivo tiene un tamaño de solo 56K y mi ancho de banda de carga es de 1.87Mbps.

+1

¿Qué tan grande es lo que va a subir? 18s sería muy rápido para 1TB. – Mat

+2

¿Qué tan grande es el archivo y cuál es su ancho de banda de subida de Internet? –

+0

El archivo tiene 56K y mi ancho de banda es de 1.5mbps; – Jeff

Respuesta

8

Suena muy similar a un problema que tuve recientemente, que fue causado por la configuración de detección automática de proxy en "Opciones de Internet" en Windows.

El SDK de Amazon usa WebRequest para realizar sus solicitudes HTTP y de forma predeterminada WebRequest se adhiere a las configuraciones de "Opciones de Internet" de las computadoras para detectar proxys locales. Afortunadamente WebRequest tiene una propiedad estática WebRequest.DefaultWebProxy que, cuando se establece en null, elimina la detección automática de proxy.

Todo lo que necesita hacer es configurarlo para null antes de usar AmazonS3:

WebRequest.DefaultWebProxy = null; // here 

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

[...] 

Vale la pena señalar que esta propiedad estática sólo se tiene que fijar una vez por dominio de aplicación y no cada vez que desee crea un objeto AmazonS3.

enfoque alternativo:

Si no te importa la reconfiguración de la máquina, es ir a:

Windows Control Panel > Internet Options > Connections > Lan Settings 

y elimina la marca de "Detectar la configuración automáticamente". Si usa este enfoque, no necesita configurar la propiedad DefaultWebProxy.

Más información:

Cuando me encontré con el problema que hizo la siguiente pregunta en SO:

How to turn off the automatic proxy detection in the `AmazonS3` object?

Cuenta con más detalles que mi respuesta aquí si su interés.

+0

tiene el mismo problema. gracias por la respuesta, esto me quita 15 segundos de mi programa ahora ... – iamserious

+0

@iamserious ¡Me alegro de que haya sido útil! :) – InvertedAcceleration

3

Es necesario cambiar la BufferSize en el AmazonS3Config

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

Probé http, multiparte, pero nada realmente hizo mella en la velocidad de carga, como ajustar el BufferSize. BufferSize aumenta mi velocidad de carga en 5x. – Tim