2011-10-24 121 views
3

我想用C#上傳到亞馬遜S3圖像:加快寫入到Amazon S3

PutObjectRequest titledRequest = null; 

S3Response response = null; 

using (var memoryStream = new MemoryStream()) 
{ 

    image.Save(memoryStream, ImageFormat.Png); 

    titledRequest = new PutObjectRequest(); 

    titledRequest.WithBucketName(bucketName) 
       .WithKey(keyName) 
       .WithCannedACL(S3CannedACL.PublicRead) 
       .WithInputStream(memoryStream); 

    response = client.PutObject(titledRequest); 
} 

正如你所看到的,我沒有保存圖像文件在本地而是分流到S3。但是,由於某種原因,對於50kb的文件,此過程需要大約50秒的時間!

我的上傳速度超過1mbps沒有什麼問題。

我想知道保存文件和上傳更快嗎?

有什麼我應該考慮加快上傳過程?再一次,在寬帶方面沒有問題!

+0

通過上傳管理器或命令行工具將相同的文件上傳到S3需要多長時間?你是否在一天中的不同時間測量過幾次? S3或從數據中心到AWS的路線可能會不時變慢。 –

+0

@EricJ - 我只是嘗試了一個118kb的圖像,並花了12秒。花50秒左右的50kb是一致的 - 我已經手動運行了10次以上的應用程序,並且使用了'Stopwatch'類。 – Abs

回答

5

Amazon docs說:

如果從輸入流上傳,始終指定與 內容大小的元數據集。否則,輸入流的內容必須在發送到Amazon S3之前緩衝在內存中。這可能會導致對性能產生非常負面影響 。

很難相信這可能是您的問題,但您應該遵循的最佳做法。

其他的事情要考慮 -

  • 你需要指定其他ObjectMetadata告訴S3如何處理 你的形象?
  • 桶是否存在,或者是創建第一個對象的一部分 發送操作?
+0

我已經改變了我一起解決問題的方式。但是,這是非常有用的信息,我會在不久的將來記住它。 – Abs