Я создал простую систему для добавления и удаления файла из базы данных EF Core, например:
Добавить файл:
public async Task AddFile(IFileListEntry file)
{
File fileToAdd = await File.GetFileAsync(file);
_context.Files.Add(fileToAdd);
_context.SaveChanges();
}
Получить файл из интерфейса IFileListEntry
, содержащий файл в Stream
:
public static async Task<File> GetFileAsync(IFileListEntry file)
{
using MemoryStream ms = new MemoryStream();
await file.Data.CopyToAsync(ms);
File f = new File
{
Name = file.Name,
Type = file.Type,
Size = file.Size,
LastModified = file.LastModified,
Data = ms.ToArray(),
};
ms.Dispose();
return f;
}
Удалить файл:
public void DeleteFile(File file)
{
file.Data = new byte[0]; //Test
_context.Files.Remove(file);
_context.SaveChanges();
}
Все добавленные файлы сохраняются в List
и удаляются из него, а сам список содержится в файле .razor
(здесь не показано, так как я думаю, что это не имеет отношения к моей проблеме), а также в база данных EF Core.
Контекст базы данных _context
получен путем внедрения зависимостей и наследуется от DbContext
class.
Поэтому моя проблема: после добавления и удаления файла я могу наблюдайте утечку памяти, поскольку ОЗУ находится на том же уровне после добавления файла в базу данных и список.
Так что я делаю не так? Я действительно не могу понять, откуда он может появиться, так как MemoryStream
удаляется после его использования, и когда файл удаляется, я заменяю заполненный byte[]
на пустой, или даже ссылку null
, Я убедился, что List
в моем .razor
файле - это новый пустой список, который мы снова заполняем добавленными файлами. Я не проверял _context
.