2011-07-24 15 views
6

Umieszczam pliki w pamięci S3 przy użyciu poniższego kodu. Stwierdzam, że jest to wyjątkowo powolne. Stoper wskazał 18 sekund +. Jakieś sugestie lub inne doświadczenia?Amazon S3 PutObject jest bardzo wolny

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

Ten kod to C#. Używam amazon .net sdk.

Plik ma tylko 56 KB, a moja przepustowość to 1,87 Mb/s.

+1

Jak duży jest rzeczą, którą przesyłasz? 18 byłoby bardzo szybkie dla 1 TB. – Mat

+2

Jak duży jest plik i jaka jest jego przepustowość w Internecie? –

+0

Plik ma 56 KB, a moja przepustowość to 1,5 Mb/s przesyłanie – Jeff

Odpowiedz

8

To brzmi bardzo podobnie do problemu, który miałem ostatnio, co zostało spowodowane przez ustawienia automatycznego wykrywania proxy w "Opcjach internetowych" w systemie Windows.

Pakiet SDK Amazon używa numeru WebRequest do wysyłania żądań HTTP i domyślnie WebRequest jest zgodny z ustawieniami "Ustawienia internetowe" komputerów do wykrywania lokalnych serwerów proxy. Na szczęście WebRequest ma nieruchomość statyczną WebRequest.DefaultWebProxy, która po ustawieniu na null usuwa automatyczne wykrywanie proxy.

Wszystko, co musisz zrobić, to ustawić go null przed zażyciem AmazonS3:

WebRequest.DefaultWebProxy = null; // here 

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

[...] 

Warto zauważyć, że ta właściwość statyczna musi tylko ustawić raz na domenie aplikacji, a nie za każdym razem, gdy chcesz utwórz obiekt AmazonS3.

Alternatywne podejście:

Jeśli nie przeszkadza rekonfiguracji urządzenia, to udać się do:

Windows Control Panel > Internet Options > Connections > Lan Settings 

i odznacz "Automatycznie wykryj ustawienia". Jeśli zastosujesz to podejście, nie musisz w ogóle ustawiać właściwości DefaultWebProxy.

Dalsze informacje:

Kiedy napotkał problem Poprosiłem następujące pytanie na SO:

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

Ma więcej szczegółów niż moja odpowiedź tutaj, jeśli interesuje.

+0

również miał ten sam problem! dzięki za odpowiedź - to zrzuca 15 sekund wolnego od mojego programu teraz .. – iamserious

+0

@iamserious Cieszę się, że pomogło! :) – InvertedAcceleration

3

Trzeba zmienić BUFFERSIZE na AmazonS3Config

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

Próbowałem http, wieloczęściowy, ale nic tak naprawdę nie wpłynęło znacząco na szybkość wysyłania, jak dostosowanie wielkości bufora. BufferSize zwiększa moją prędkość wysyłania o 5x. – Tim