I'm creating a .net wrapper service for my application that utilizes Azure Blob Storage as a file store. My application creates a new CloudBlobContainer
for each "account" on my system. Each account is limited to a maximum amount of storage.
What is the simplest and most efficient way to query the current size (space utilization) of an Azure CloudBlobContainer`?
Azure portal : Open the blob container, select properties under Settings, then click on the Calculate Size button which gives size for each type of blob and also total size of the container.
Azure Blob Sizes And on the right you can select the BLOB view tab to see the blobs in that container and of course the size of each blob. The Blob view is sorted based on size, so if even if you have hundreds or thousands of blobs, you will see which ones are taking up the most space first.
Scale targets for Blob storage Specifically, call the Put Blob or Put Block operation with a blob or block size that is greater than 4 MiB for standard storage accounts. For premium block blob or for Data Lake Storage Gen2 storage accounts, use a block or blob size that is greater than 256 KiB.
FYI here's the answer. Hope this helps.
public static long GetSpaceUsed(string containerName)
{
var container = CloudStorageAccount
.Parse(ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString)
.CreateCloudBlobClient()
.GetContainerReference(containerName);
if (container.Exists())
{
return (from CloudBlockBlob blob in
container.ListBlobs(useFlatBlobListing: true)
select blob.Properties.Length
).Sum();
}
return 0;
}
As of version v9.x.x.x or greater of WindwosAzure.Storage.dll (from Nuget package), ListBlobs
method is no longer available publicly. So the solution for applications targeting .NET Core 2.x+ would be like following:
BlobContinuationToken continuationToken = null;
long totalBytes = 0;
do
{
var response = await container.ListBlobsSegmentedAsync(continuationToken);
continuationToken = response.ContinuationToken;
totalBytes += response.Results.OfType<CloudBlockBlob>().Sum(s => s.Properties.Length);
} while (continuationToken != null);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With