2016-11-18 34 views
0

我在考慮使用CloudQueue.BeginAddMessage方法進行記錄的性能方面。每次調用logger.LogMessage都會導致將消息發送到Azure隊列。我知道每次致電BeginAddMessage都會發送POST請求。等待它完成不是一種選擇,因爲我的目標是儘可能快地製作logger.LogMessage方法。這就是爲什麼我打算只開啓操作並忘記(如果請求失敗,它不是那麼重要)。CloudQueue.BeginAddMessage在記錄器實現中

調用CloudQueue.BeginAddMessage需要多長時間?

它在returninig之前執行HTTP請求初始化(如建立HTTP正文,打開連接等)嗎?

如果是,那麼我將不得不將這個初始化移動到其他線程,方法是將其封裝在異步調用中,如Task.Run(() => CloudQueue.BeginAddMessage())

有更好的選擇嗎?

+0

你知道使用Task.Run創建大量線程可能會創建比http請求初始化更多的開銷,如果發生這種情況? –

+0

是的,這是我的擔心之一。仍然不知道什麼是更好的,直到我知道BeginAddMessage如何工作 – neleus

+0

你可以看看源代碼,看看它是如何實現的:https://github.com/Azure/azure-storage-net/blob/master/Lib/ ClassLibraryCommon /隊列/ CloudQueue.cs。 –

回答

2

這是我的建議:在你的程序中定義一個內存隊列,logger.LogMessage()所做的只是添加一條新消息到內存隊列。此外,啓動專用後臺線程以消耗內存隊列並將日誌消息上載到Azure隊列中。您甚至可以爲此專用線程設置一個信號量,以便可以由您控制的併發上傳日誌消息。