Posteriormente a observar en varios repositorios y foros de internet al terminar hallamos la solución que te mostramos ahora.
Solución:
Si solo desea saber cuántos blobs hay en un contenedor sin escribir código, puede usar la aplicación Microsoft Azure Storage Explorer.
- Abra el BlobContainer deseado
- Haga clic en el icono Estadísticas de la carpeta
- Observe el recuento de blobs en la ventana Actividades
Intenté contar blobs usando ListBlobs() y para un contenedor con alrededor de 400 000 elementos, me tomó más de 5 minutos.
Si tiene control total sobre el contenedor (es decir, controla cuándo se producen las escrituras), puede almacenar en caché la información de tamaño en los metadatos del contenedor y actualizarla cada vez que se elimina o se inserta un elemento. Aquí hay un fragmento de código que devolvería el recuento de blobs del contenedor:
static int CountBlobs(string storageAccount, string containerId)
String.IsNullOrEmpty(countUpdateTime))
recountNeeded = true;
else
DateTime dateTime = new DateTime(long.Parse(countUpdateTime));
// Are we close to the last modified time?
if (Math.Abs(dateTime.Subtract(cloudBlobContainer.Properties.LastModifiedUtc).TotalSeconds) > 5)
recountNeeded = true;
int blobCount;
if (recountNeeded)
blobCount = 0;
BlobRequestOptions options = new BlobRequestOptions();
options.BlobListingDetails = BlobListingDetails.Metadata;
foreach (IListBlobItem item in cloudBlobContainer.ListBlobs(options))
blobCount++;
cloudBlobContainer.Metadata.Set("ItemCount", blobCount.ToString());
cloudBlobContainer.Metadata.Set("CountUpdateTime", DateTime.Now.Ticks.ToString());
cloudBlobContainer.SetMetadata();
else
blobCount = int.Parse(count);
return blobCount;
Esto, por supuesto, supone que actualiza ItemCount/CountUpdateTime cada vez que se modifica el contenedor. CountUpdateTime es una protección heurística (si el contenedor se modificó sin que alguien actualizara CountUpdateTime, esto forzará un recuento) pero no es confiable.
La API no contiene un método o propiedad de recuento de contenedores, por lo que debe hacer algo como lo que publicó. Sin embargo, deberá tratar con NextMarker si supera los 5000 artículos devueltos (o si especifica un número máximo para devolver y la lista supera ese número). Luego, realizará llamadas adicionales basadas en NextMarker y agregará los recuentos.
EDITAR: Por Smarx: el SDK debería encargarse de NextMarker por usted. Deberá tratar con NextMarker si está trabajando en el nivel de API, llamando a List Blobs a través de REST.
Como alternativa, si está controlando las inserciones o eliminaciones de blobs (a través de un servicio wcf, por ejemplo), puede usar el área de metadatos del contenedor de blobs para almacenar un recuento de contenedores en caché que calcula con cada inserción o eliminación. Solo tendrá que lidiar con la simultaneidad de escritura en el contenedor.
Si te sientes suscitado, eres capaz de dejar un ensayo acerca de qué le añadirías a esta noticia.