我正在编写遍历大量图片数据的代码,准备了一个大的delta块,其中包含所有压缩后的数据以进行发送。
以下是有关此数据可能如何的示例
[MessagePackObject]
public class Blob : VersionEntity
{
[Key(2)]
public Guid Id { get; set; }
[Key(3)]
public DateTime CreatedAt { get; set; }
[Key(4)]
public string Mediatype { get; set; }
[Key(5)]
public string Filename { get; set; }
[Key(6)]
public string Comment { get; set; }
[Key(7)]
public byte[] Data { get; set; }
[Key(8)]
public bool IsTemporarySmall { get; set; }
}
public class BlobDbContext : DbContext
{
public DbSet<Blob> Blob { get; set; }
protected override void OnmodelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blob>().HasKey(o => o.Id);
}
}
使用此功能时,我会将所有内容处理到一个文件流中,并且我希望在任何给定时间尽可能少地保留在内存中。
这样足以做到吗?
foreach(var b in context.Where(o => somefilters).AsnoTracking())
MessagePackSerializer.Serialize(stream,b);
这将仍然用所有blob记录填充内存,还是在我对枚举器进行迭代时将它们一一处理。它不使用任何ToList,仅使用枚举器,因此Entity Framework应该可以随时处理它,但是我不确定那是否是它的作用。
这里的任何实体框架专家都可以为如何正确处理提供一些指导。