2011-07-24 6 views
6

Je place des fichiers dans un stockage S3 en utilisant le code ci-dessous. Je trouve que c'est extrêmement lent. Le chronomètre indiquait 18 secondes +. Des suggestions ou d'autres expériences?Amazon S3 PutObject est très lent

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

Ce code est C#. J'utilise l'amazon .net sdk.

La taille du fichier est seulement de 56 Ko et ma bande passante de téléchargement est de 1,87 Mbps.

+1

Quelle est la chose que vous êtes le téléchargement? 18s serait très rapide pour 1TB. – Mat

+2

Quelle est la taille du fichier et quelle est votre bande passante de téléchargement Internet? –

+0

Le fichier est 56K et ma bande passante est de 1,5mbps upload – Jeff

Répondre

8

Cela ressemble beaucoup à un problème que j'avais récemment, qui a été causé par les paramètres de détection automatique de proxy dans "Options Internet" sur Windows.

Amazon SDK utilise WebRequest pour rendre ses demandes HTTP et par défaut WebRequest adhère aux paramètres «Option Internet» ordinateurs pour détecter les proxys locaux. Heureusement, WebRequest a une propriété statique WebRequest.DefaultWebProxy qui, lorsqu'elle est définie sur null, supprime la détection automatique du proxy.

Tout ce que vous devez faire est de le mettre à null avant de commencer à utiliser AmazonS3:

WebRequest.DefaultWebProxy = null; // here 

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

[...] 

Il convient de noter que cette propriété statique ne doit être réglé une fois par domaine d'application et non à chaque fois que vous voulez créez un objet AmazonS3.

autre approche:

Si vous ne me dérange pas de reconfigurer la machine, est d'aller à:

Windows Control Panel > Internet Options > Connections > Lan Settings 

et décocher "Détecter automatiquement les paramètres". Si vous utilisez cette approche, vous n'avez pas besoin de définir la propriété DefaultWebProxy.

Plus d'info:

Quand je rencontrais la question que je pose la question suivante sur le SO:

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

Il a plus de détails que ma réponse ici si vous êtes intéressé.

+0

a eu le même problème aussi! merci pour la réponse - cela frappe 15 secondes de mon programme maintenant .. – iamserious

+0

@iamserious Glad it helps! :) – InvertedAcceleration

3

Vous devez changer la BufferSize sur le AmazonS3Config

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

J'ai essayé http, multipart, mais rien n'a vraiment mis un coup de dent majeur dans la vitesse de téléchargement comme l'ajustement du BufferSize. BufferSize augmente ma vitesse de téléchargement de 5x. – Tim