Dus*_*sda 9 c# azure blobstorage azure-storage-blobs
我有大约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上传器的实例.我在此批次中有170,000个图像可供使用,因此这意味着上传者的17个实例.当我在笔记本电脑上运行所有这些时,所有这些设备的性能均达到每组约4.3秒.
简而言之,我只是为每10,000张图像运行一个blob上传器实例,而不是试图让线程最佳地工作,而是同时在一台机器上运行.总体性能提升?
| 归档时间: | 
 | 
| 查看次数: | 7033 次 | 
| 最近记录: |