我在我的容器中有3000个文件。在我的gridview中,我显示容器blob的列表,但是3000太多了,对性能不好(我的想法:))。Azure Blob List Paging
我需要一个传呼代码,例如我的页面大小格是50,我会表现出我的容器中第一个50 BLOB在gridview.Of当然,我的第一页,我需要更多的pageindexchanging代码:)
还是没有呢不影响性能?
我在我的容器中有3000个文件。在我的gridview中,我显示容器blob的列表,但是3000太多了,对性能不好(我的想法:))。Azure Blob List Paging
我需要一个传呼代码,例如我的页面大小格是50,我会表现出我的容器中第一个50 BLOB在gridview.Of当然,我的第一页,我需要更多的pageindexchanging代码:)
还是没有呢不影响性能?
根据您的描述,我建议您可以尝试使用azure存储SDK的ListBlobsSegmented方法来实现您的要求。
ListBlobsSegmented inclue maxResults参数。
maxResults: 一个非负整数值,表示一次返回的最大结果数,直到每个操作的限制值为5000.如果此值为null,则最大可能结果数将会退回,最多5000.
因此,您可以在首次加载页面时搜索50条记录。
当您的页面索引改变时,您可以调用搜索方法根据gridview索引搜索正确数量的斑点。
注意:要包含性能,我们不会一次获得所有的斑点来知道容器中有多少个斑点。所以我们不知道blob的总数。我建议你可以在第一时间搜索100个blob,如果客户点击页面2,它会搜索接下来的100个blob。
下面是一个例子演示,希望它给你一些提示: 的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);
}
你知不知道,你是国王:)非常感谢你,它的工作:) –
当你有时间可以帮助获取容器ListBlobsSegmented与SasUri.I我得到的名单没有问题,但当用户刷新页面或5分钟后又一个one.I总是得到uri与SaS的链接是不利于性能。我有查看状态容器bloblist,但我有1000用户:) –
你想使用SAS来列出blob?您能否详细解释“用户刷新页面还是5分钟后出现另一页”?我建议你可以开始一个新的线程并发布更多的细节信息,这对我们来说更容易找到解决方案。 –