Tôi đang viết mã đi qua một lượng lớn dữ liệu hình ảnh, chuẩn bị một khối delta lớn chứa tất cả được nén để gửi.
Đây là một ví dụ về cách dữ liệu này có thể
[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);
}
}
Khi làm việc với điều này, tôi xử lý mọi thứ thành một đoạn phim và tôi muốn lưu giữ ít nhất có thể trong bộ nhớ tại bất kỳ thời điểm nào.
Có đủ để làm điều đó như thế này?
foreach(var b in context.Where(o => somefilters).AsNoTracking())
MessagePackSerializer.Serialize(stream, b);
Điều này sẽ vẫn lấp đầy bộ nhớ với tất cả các bản ghi blob, hoặc chúng sẽ được xử lý từng cái một khi tôi lặp lại trên bảng liệt kê. Nó không sử dụng bất kỳ ToList nào, chỉ có điều tra viên, vì vậy Entity Framework sẽ có thể xử lý nó khi đang di chuyển, nhưng tôi không chắc đó có phải là điều không.
Bất kỳ chuyên gia Khung thực thể nào ở đây, những người có thể đưa ra một số hướng dẫn về cách xử lý việc này đúng cách.
stream
đến?). Cuối cùng, việc xử lý dữ liệu filestream của SQL Server nhanh và phát trực tuyến đòi hỏi một cách tiếp cận khác ngoài phạm vi EF.