gpt4 book ai didi

c# - 在 blob 存储中并行上传 block

转载 作者:行者123 更新时间:2023-12-03 06:31:10 25 4
gpt4 key购买 nike

我正在尝试将其转换为并行以提高文件的上传时间,但根据我的尝试,它并没有及时发生很大的变化。我想并排上传 block 然后确认它们。我怎样才能并行地做到这一点?

public static async Task UploadInBlocks
(BlobContainerClient blobContainerClient, string localFilePath, int blockSize)
{
string fileName = Path.GetFileName(localFilePath);
BlockBlobClient blobClient = blobContainerClient.GetBlockBlobClient(fileName);

FileStream fileStream = File.OpenRead(localFilePath);

ArrayList blockIDArrayList = new ArrayList();

byte[] buffer;

var bytesLeft = (fileStream.Length - fileStream.Position);

while (bytesLeft > 0)
{
if (bytesLeft >= blockSize)
{
buffer = new byte[blockSize];
await fileStream.ReadAsync(buffer, 0, blockSize);
}
else
{
buffer = new byte[bytesLeft];
await fileStream.ReadAsync(buffer, 0, Convert.ToInt32(bytesLeft));
bytesLeft = (fileStream.Length - fileStream.Position);
}

using (var stream = new MemoryStream(buffer))
{
string blockID = Convert.ToBase64String
(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()));

blockIDArrayList.Add(blockID);


await blobClient.StageBlockAsync(blockID, stream);
}

bytesLeft = (fileStream.Length - fileStream.Position);

}

string[] blockIDArray = (string[])blockIDArrayList.ToArray(typeof(string));

await blobClient.CommitBlockListAsync(blockIDArray);
}

最佳答案

当然。您不应该期待任何改进 - 恰恰相反。 Blob 存储没有任何简单的吞吐量限制,而这将受益于在多个流中上传,并且您已经在执行极轻量级 I/O,这将完全受 I/O 限制。

好的 I/O 代码绝对不会从并行化中获得任何好处。无论您部署多少工作人员,管道都只有这个粗,并且不允许您传递更多数据。

您的所有代码都只是重新实现了 blob 存储库所具有的已经非常有效的机制...而且您做得更糟,有无意义的分配、错误的参数和新的错误机会。不要那样做。该库可以很好地处理流。

关于c# - 在 blob 存储中并行上传 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75225937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com