- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的硬盘上本地存储了大约 110,000 张不同格式(jpg、png 和 gif)和大小 (2-40KB) 的图像。我需要将它们上传到 Azure Blob 存储。在执行此操作时,我需要设置一些元数据和 blob 的 ContentType,但否则它就是直接批量上传。
我目前正在使用以下方法来处理一次上传一张图像(并行超过 5-10 个并发任务)。
static void UploadPhoto(Image pic, string filename, ImageFormat format)
{
//convert image to bytes
using(MemoryStream ms = new MemoryStream())
{
pic.Save(ms, format);
ms.Position = 0;
//create the blob, set metadata and properties
var blob = container.GetBlobReference(filename);
blob.Metadata["Filename"] = filename;
blob.Properties.ContentType = MimeHandler.GetContentType(Path.GetExtension(filename));
//upload!
blob.UploadFromStream(ms);
blob.SetMetadata();
blob.SetProperties();
}
}
我想知道是否可以采用另一种技术来处理上传,使其尽可能快。这个特定项目涉及将大量数据从一个系统导入到另一个系统,并且出于客户原因,需要尽快进行。
最佳答案
好的,这就是我所做的。我修改了在异步链中运行 BeginUploadFromStream()、BeginSetMetadata()、BeginSetProperties(),并行超过 5-10 个线程(ElvisLive 和 Knightpfhor 建议的组合)。这可行,但超过 5 个线程的任何线程都会产生糟糕的性能,每个线程需要 20 秒以上(一次处理包含 10 个图像的页面)才能完成。
因此,总结一下性能差异:
好吧,这很有趣。同步上传 blob 的一个实例的性能比另一种方法中每个线程的性能好 5 倍。因此,即使运行 5 个线程的最佳异步平衡,也能获得基本相同的性能。
因此,我调整了图像文件导入,将图像分成每个包含 10,000 个图像的文件夹。然后我使用 Process.Start() 为每个文件夹启动 Blob uploader 的实例。我在此批处理中有 170,000 张图像需要处理,因此这意味着有 17 个 uploader 实例。当在我的笔记本电脑上运行所有这些时,所有这些的性能都稳定在每组约 4.3 秒。
长话短说,我没有尝试让线程以最佳方式工作,而是为每 10,000 个图像运行一个 Blob uploader 实例,所有图像同时在一台计算机上运行。总体性能提升?
关于c# - 批量上传大量图像到Azure Blob存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7719374/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!