2017-04-22 1 views
0

내 컨테이너에 3000 files.In 내 gridview 컨테이너 Blob 목록을 표시하지만 3000 너무 많은 성능 (내 생각 :))에 좋지 않다.Azure Blob리스트 페이징

은 내가 더 많은 코드 :

또는 그것을 수행을 pageindexchanging에 내가 필요 gridview.Of 코스의 첫 페이지 내 컨테이너에서 처음으로 50 방울을 보여줍니다 페이징 코드를, 예를 들어 내 그리드 페이지 크기는 50입니다 필요 성능에 영향을주지 않습니까?

답변

1

귀하의 설명에 따르면, 귀하는 귀하의 요구 사항을 충족시키기 위해 푸른 색 기억 장치 SDK의 ListBlobsSegmented 방법을 사용할 수 있습니다.

ListBlobsSegmented는 maxResults 매개 변수를 포함합니다.

maxResults : 한 번에 최대 5000 개의 작업 제한 수까지 반환되는 결과의 최대 개수를 나타내는 음이 아닌 정수 값입니다.이 값이 null이면 결과의 가능한 최대 수는

페이지가 처음로드 될 때 50 개의 레코드 만 검색하면됩니다.

페이지 색인이 변경되면 검색 방법을 호출하여 gridview 색인에 따라 적합한 개수의 BLOB를 검색 할 수 있습니다.

알림 : 성능을 포함 시키려면 모든 얼룩을 한 번에 가져와 컨테이너에 얼룩이 얼마나 많은지 알 수는 없습니다. 그래서 우리는 얼룩의 총 수를 알 수 없습니다. 나는 당신이 100 얼룩을 처음 검색 할 수 있다고 제안합니다. 고객이 2 페이지를 클릭하면 다음 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);  
     } 

결과 : enter image description here

+0

당신은 아는가, 당신이를 왕 : :) 정말 고마워요. –

+0

SasUri.I로 컨테이너 ListBlobsSegmented를 가져 오는 데 도움이 될 때가 있습니다. 거기에 목록을 받고 아무 문제가 있지만 사용자가 페이지를 새로 고치거나 5 분 나중에 또 하나 오는 때. 나는 항상 SaS와 uri 링크를 얻을 성능에 좋지 않습니다.? 컨테이너 bloblist에 대한 viewstates가 있지만 1000 사용자가 :) –

+0

blob을 나열하기 위해 SAS를 사용하고 싶습니까? "사용자가 페이지를 새로 고치거나 5 분 후에 다른 페이지로 올 때"에 대해 더 자세히 설명해 주시겠습니까? 새 스레드를 시작하고 자세한 정보를 게시하면 솔루션을 쉽게 찾을 수 있습니다. –