C# 并行上传图像到Azure blob有什么更好的选择?

C# 并行上传图像到Azure blob有什么更好的选择?,c#,parallel-processing,message-queue,azure-storage-blobs,C#,Parallel Processing,Message Queue,Azure Storage Blobs,我有一个列表,每条消息都有一个图像和列表,现在我需要为每条消息更新图像和附件的blob Url 解决方案1: 调用图像的UploadBlob和每个附件的UploadBlob,然后使用BlobURL更新数据库中的消息对象 解决方案2 一次性上传图像和所有附件,并使用并行上传和更新Blob URl并将消息保存在DB中,每条消息都有一个唯一的id,因此在上传到Blob时,我可以设置此id以创建唯一的Blob URl,因此要更新消息,我需要将消息id映射到包含消息id的Blob URl 如果您有任何其他

我有一个列表,每条消息都有一个图像和列表,现在我需要为每条消息更新图像和附件的blob Url

解决方案1: 调用图像的UploadBlob和每个附件的UploadBlob,然后使用BlobURL更新数据库中的消息对象

解决方案2 一次性上传图像和所有附件,并使用并行上传和更新Blob URl并将消息保存在DB中,每条消息都有一个唯一的id,因此在上传到Blob时,我可以设置此id以创建唯一的Blob URl,因此要更新消息,我需要将消息id映射到包含消息id的Blob URl


如果您有任何其他提高代码可读性和性能的解决方案,请告知我,我不确定我是否完全理解这个问题,但是。。。似乎每条邮件都有一个图像和零个或多个附件,并且邮件对象需要有对图像和相关附件的引用

如果这是一个正确的解释:每次上传都会有自己的blob。即使使用上面的解决方案#2,在所有上传之后,您仍然会得到多个blob URI

我不知道这是否适合你的应用程序,无论是上传的桌面应用程序,还是从最终用户那里获取图像和附件,然后上传到blob(以及正在编写的数据库记录)的web应用程序。如果是后者,我建议如下:

  • 编写消息记录(这可能会给您返回某种类型的唯一ID)
  • 收到每个图像或附件时,将其上载到blob存储,然后使用生成的URI更新消息
  • 您可以启动并行任务来上载每个图像或附件,然后更新消息记录。只要你有足够的带宽,并行上传就会在一定程度上充分利用它。每个存储帐户都有一个吞吐量上限(每秒5000个事务,每秒3Gbps)


    当然还有其他方法,例如引入消息更新队列、使用CQRS模式等。部分决策将基于应用程序的体系结构(如我所述,我无法判断这是一个桌面应用程序进行上传。到blob存储,还是一个web服务器进行上传)。

    根据我的理解,看起来解决方案2更好

    我们可以在任务并行库的帮助下并行上载多个文件:。我们还可以使用异步模式(调用Begin/End方法)。但是如果我们不同时上传太多的文件会更好。如果出现太多挂起的web请求,其中一些请求可能会失败。例如,我们可以选择创建10个任务,等待1个任务完成,然后创建第11个任务

    致以最良好的祝愿


    Xu Ming。

    Hi david这是一个向WCF服务发送请求的Web应用程序,WCF调用了我已实现上传到blob的方法的业务,我无法控制消息,因为我从XML获取消息,它可以包含1000条消息,每条消息可以包含多个附件,生成xml的应用程序确保附件的大小(Kb)很小