Ich schreibe Code, der große Mengen von Bilddaten durchläuft, und bereite einen großen Delta-Block vor, der alles zum Senden komprimiert enthält.
Hier ist ein Beispiel, wie diese Daten sein könnten
[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);
}
}
Wenn ich damit arbeite, verarbeite ich alles zu einem Dateistream und möchte zu einem bestimmten Zeitpunkt so wenig wie möglich im Speicher behalten.
Ist es genug, um es so zu machen?
foreach(var b in context.Where(o => somefilters).AsNoTracking())
MessagePackSerializer.Serialize(stream, b);
Füllt dies immer noch den Speicher mit allen Blob-Datensätzen oder werden sie einzeln verarbeitet, während ich den Enumerator durchlaufe. Es wird keine ToList verwendet, nur der Enumerator, daher sollte Entity Framework in der Lage sein, sie unterwegs zu verarbeiten, aber ich bin mir nicht sicher, ob dies der Fall ist.
Alle Entity Framework-Experten hier, die eine Anleitung geben können, wie dies richtig gehandhabt wird.
stream
das?). Schließlich erfordert der schnelle Umgang mit SQL Server-Dateistreamdaten und das Streaming einen anderen Ansatz, der über EF hinausgeht.