我有以下的算法,將數據寫入到Azure的Blob存儲運行任務的最佳數量是多少?
private const long MaxChunkSize = 1024 * 1024 * 4; // 4MB
private void UploadPagedDataToBlob(...)
{
...
List<Task> list_of_tasks = new List<Task>();
do
{
var stream = new MemoryStream(data, index, (int)blockSize);
var task = _blob.WritePagesAsync(stream, startPosition, null);
list_of_tasks.Add(task);
...
}
while (remainingDataLength > 0);
Task.WaitAll(list_of_tasks.ToArray());
}
如果我的文件有大小628MB
=>則list_of_tasks
有157
任務(628/MaxChunkSize)。通常我有超過1個TB文件。我不想有這麼多的運行任務,如何創建更高效的算法?運行任務的最佳數量是多少?例如不超過200,任何建議?
這取決於。遠程系統可能會限制連接,如果CPU處於限制狀態,您可能希望在單個CPU上將其限制爲核心。我們不知道'_blob'是什麼,所以很難回答。一般來說,使用Parallel.For或TPL DataFlow會更好,並讓TPL決定同時運行多少個任務。 –
有段時間我回答了類似的問題。這可能會有所幫助:http://stackoverflow.com/a/32252521/1835769 – displayName
您可以通過實驗確定您的方案的最佳任務數量,而不是我們。設計一個實驗,仔細執行它,你就會知道答案。 –