Возможная утечка памяти в моей службе Blob Service / Blazor Server .netC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Возможная утечка памяти в моей службе Blob Service / Blazor Server .net

Сообщение Anonymous »

Я добавил новую функцию в одно из моих приложений Blazor.
Это позволяет загружать файлы для блокировки хранения в блоках.
Это работает очень хорошо. Я посмотрел на воспоминания о обработке в Visual Studio. Где у моего приложения было все время 80 МБ, со всеми его вещами. Но когда я начинаю загрузку, я вижу, что потребление памяти увеличивается на 10-20 МБ, и оно не упадет. Кроме того, он увеличивается с каждой загрузкой файла. Обратите внимание, что я загружаю файлы в блоки 10 МБ, до того, как у меня было 100 МБ, и он увеличился на 100-200 МБ. Так что теперь я не совсем уверен, что утечка памяти (я думаю, это так) или GC занимает слишком долго.public async Task UploadFileToBlobStorage(Stream stream, string fileName, string containerName,string contentType,IProgress progress,CancellationToken cancellationToken)
{
_logger.LogInformation($"Uploading file {fileName} to container {containerName}");
var blobServiceClient = new BlobServiceClient(new Uri($"https://{accountName}.blob.core.windows.net"), new DefaultAzureCredential());
var containerClient = blobServiceClient.GetBlobContainerClient(containerName);
await containerClient.CreateIfNotExistsAsync(cancellationToken:cancellationToken);
var blockblobClient = containerClient.GetBlockBlobClient(fileName);

var blockIds = new List();
var buffer = new byte[10 * 1024 * 1024]; // 10 MB
int bytesRead;
int blockNumber = 0;
long totalBytesRead = 0;

var blobHttpHeader = new BlobHttpHeaders
{
ContentType = contentType,
ContentDisposition = $"attachment; filename={fileName}",

};

while ((bytesRead = await stream.ReadAsync(buffer.AsMemory( 0, buffer.Length), cancellationToken)) > 0)
{
var blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(blockNumber.ToString("d6")));
blockIds.Add(blockId);

using (var blockStream = new MemoryStream(buffer, 0, bytesRead))
{
await blockblobClient.StageBlockAsync(blockId, blockStream,cancellationToken: cancellationToken);
}
totalBytesRead += bytesRead;
progress?.Report(totalBytesRead);
blockNumber++;
}

await blockblobClient.CommitBlockListAsync(blockIds,httpHeaders:blobHttpHeader,cancellationToken:cancellationToken);
_logger.LogInformation($"File {fileName} uploaded to container {containerName} successfull");
}
< /code>
Поток переменной, который передается функции, представляет собой ibrowserfile, который был создан с использованием < /p>
using var stream = _selectedFile.OpenReadStream(maxAllowedSize: long.MaxValue);
< /code>
Я был бы рад получить советы. < /p>

Кто -нибудь видит серьезную ошибку?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... server-net
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»