我將blob異步上傳到Azure Blob存儲。我可以使用CloudBlockBlob.BeginUploadFromStream,或者我可以使用BackgroundWorker調用同步上傳方法(如UploadFile或PutBlock)。我正在尋找關於這兩種方法的利弊的一些意見。上傳Azure Blob(s)Async:BeginUploadFromStream與BackgroundWorker
我會滾球。使用BackgroundWorker方法報告進度顯得容易得多。
謝謝!
我將blob異步上傳到Azure Blob存儲。我可以使用CloudBlockBlob.BeginUploadFromStream,或者我可以使用BackgroundWorker調用同步上傳方法(如UploadFile或PutBlock)。我正在尋找關於這兩種方法的利弊的一些意見。上傳Azure Blob(s)Async:BeginUploadFromStream與BackgroundWorker
我會滾球。使用BackgroundWorker方法報告進度顯得容易得多。
謝謝!
BeginUploadFromStream會更有效率,因爲它使用的異步編程模型在I/O發生時不會佔用CPU資源。如果啓動BackgroundWorker並調用任何非APM方法,那麼在從磁盤讀取和寫入網絡等事情發生時,本質上會浪費該線程。
在.NET中,當它可用於獲得最大效率時,您幾乎總是希望使用APM模型。
請看看這篇文章here。
它描述瞭如何使用並行上傳塊來上傳blob,以及報告blob自身的進度和並行上傳。
它還鏈接到this nice article,如果您不想執行並行塊上載,您可能會發現它有用。
我正在更新這個老問題,因爲我仍然從noir的帖子中獲得很多博客點擊。請注意,在Azure存儲客戶端庫2.0中使用* FromStream方法存在新版本的博文。這個新代碼更高效,更可靠,並且仍然提供所有進度報告。
Asynchronous Parallel Block Blob Transfers with Progress Change Notification 2.0