我需要在数据库(MS SQL)中存储大量二进制数据,并通过 EF 与该数据库进行交互。不幸的是,EF 不支持 FILESTREAM(更准确地说,没有流支持)。
所以,我决定将数据存储在块中。Chunk 只是一个实体类型:
public class Data
{
public int Id { get; set; }
public Collection<Chunk> Chunks { get; set; }
}
public class Chunk
{
public int Id { get; set; }
public int DataId { get; set; }
public byte[] Content { get; set; }
}
首先,我想通过某个最佳值来限制块大小,比如 1 Mb。
但后来我想起了大物体和 LOH。
据我了解,每个Chunk.Content
实例都将被视为具有以下后果的大对象(尤其是内存碎片)。Chunk
因此,最终会导致对象的密集创建OutOfMemoryException
(它是“24/7”应用程序,使用该二进制数据是应用程序的主要目的)。
我不能为数据块重用任何缓冲区,因为我正在使用 EF...
我应该减小块大小,使其更低,然后是 85K?
或者是偏执狂?:)