我在我的容器中有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分鐘後出現另一頁」?我建議你可以開始一個新的線程併發布更多的細節信息,這對我們來說更容易找到解決方案。 –