[英]Azure WebJob Output List of Messages to Queue via ICollector seems slow
我有一個 Azure WebJob,它循環遍歷文件的頁面並處理它們。 該作業還有一個到輸出隊列的 ICollector:
[Queue("batch-pages-to-process")] ICollector<QueueMessageBatchPage> outputQueueMessage
在將所有內容發送到輸出隊列之前,我需要等到所有頁面都處理完畢,因此我沒有將每條消息添加到文件處理循環中的 ICollector,而是將消息添加到隊列消息列表中:
List<QueueMessageBatchPage>
在處理完所有頁面后,我循環遍歷列表並將消息添加到 ICollector:
foreach (var m in outputMessages)
{
outputQueueMessage.Add(m);
}
但這最后一部分似乎需要很長時間。 要添加 300 條隊列消息,大約需要 50 秒。 我沒有太多可衡量的,但這似乎很慢。 這是正常的嗎?
沒有慢與快的客觀標准可以為您提供,但有一些想法:
a) 部分排隊時間將是每個 QueueMessageBatchPage 實例的序列化......其性能將與這些實例所代表的對象圖的廣度和深度成反比。 更多的數據顯然需要更多的時間來寫入隊列。
b) 我知道您提到在處理完所有文件行之前您無法寫入隊列,但如果可能的話,您可能會重新考慮該選擇。 就您可以並行處理文件中的行和隨后寫入輸出隊列(使用多個 WebJob 實例或單個 WebJob 實例中的 TPL 任務)而言,您可能會更快地完成這項工作。 同樣,我意識到您事先聲明您不能這樣做,所以我只是建議您考慮該選擇的全部含義(如果您還沒有)。
c) 考慮的另一種可能性...確保您的存儲隊列所在的區域與您的 WebJob 所在的區域相同,以最大限度地減少延遲。
祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.