Azure Blob列表分页 [英] Azure Blob List Paging

查看:7
本文介绍了Azure Blob列表分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的容器中有3000个文件。在我的网格视图中,我显示了容器Blob的列表,但3000太多了,不利于性能(我的想法是:)。

我需要一个分页代码,例如我的网格页面大小是50,我将在我的容器中为我在网格视图中的第一个页面显示前50个斑点。当然,我需要在页面索引中更改更多代码:)

或者它不会影响性能?

推荐答案

根据您的描述,我建议您尝试使用Azure存储SDK的ListBlobsSegmented方法来满足您的需求。

ListBlobsSegated INCLUE MAXResults参数。

最大结果: 一个非负整数值,指示一次返回的最大结果数,最多为每次操作5000个的限制。如果此值为空,则将返回可能的最大结果数,最多5000个。

这样在第一次加载页面时,您只能搜索50条记录。

当页面索引更改时,您可以调用Search方法根据网格视图索引搜索正确数量的Blob。

注意:为了包括性能,我们不会一次获取所有斑点来知道您的容器中有多少斑点。所以我们无法知道水滴的总数。我建议您第一时间搜索100个水滴,如果客户点击第二页,它将搜索下一个100个水滴。

这里是一个示例演示,希望它能给你一些提示: Gridview:

<asp:GridView ID="GridView1" AllowPaging="true" PageSize="50"  OnPageIndexChanging="GridView1_PageIndexChanging" runat="server">
 </asp:GridView>

代码隐藏:

  BlobContinuationToken continuationToken = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //1*100 is the numebr of blobs you will list
                ListBlobResult(1*100);
            }
        }

        public void ListBlobResult(int index)
        {
           CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connectionstring");
           var client = storageAccount.CreateCloudBlobClient();
           var container = client.GetContainerReference("foo2");
            string prefix = null;
            bool useFlatBlobListing = true;
            BlobListingDetails blobListingDetails = BlobListingDetails.All;
           // int maxBlobsPerRequest = 50;
            List<IListBlobItem> blobs = new List<IListBlobItem>();

            if (index <= 5000)
            {
                var listingResult = container.ListBlobsSegmented(prefix, useFlatBlobListing, blobListingDetails, index, continuationToken, null, null);
                continuationToken = listingResult.ContinuationToken;
                blobs.AddRange(listingResult.Results);
            }
            else
            {
                do
                {
                    var listingResult = container.ListBlobsSegmented(prefix, useFlatBlobListing, blobListingDetails, index, continuationToken, null, null);
                    continuationToken = listingResult.ContinuationToken;
                    blobs.AddRange(listingResult.Results);
                    index = index - 5000;
                }
                while (continuationToken != null);
            }
            DataTable d1 = new DataTable();
            d1.Columns.Add("Id");
            d1.Columns.Add("Url");
            foreach (var item in blobs)
            {
                if (item.GetType() == typeof(CloudBlockBlob))
                {
                    CloudBlockBlob blob = (CloudBlockBlob)item;
                    d1.Rows.Add(blob.Name, blob.Uri);
                }
            }

            GridView1.DataSource = d1;
            GridView1.DataBind();
        }


        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

            GridView1.PageIndex = e.NewPageIndex;
            //(e.NewPageIndex*100)+100 is the numebr of blobs you will list
            ListBlobResult((e.NewPageIndex*100)+100);    
        }

结果:

这篇关于Azure Blob列表分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆