繁体   English   中英

处理大量数据

[英]Working with a large amount of data

我以ORM身份获得了c#应用和entity famework 我有带有表Images数据库。 表具有IdTimeStampData列。 该表可以包含很多实体。 另外, Data列包含大字节数组。 我需要以某个日期开始的第一个实体为例,或者以前5个为例。

var result = Images.OrderBy(img => img.TimeStamp).FirstOrDefault(img => img.TimeStamp > someDate);

抛出内存不足异常。 有什么办法可以通过吗? 我应该使用存储过程还是其他?

如果Images已经是一个查询对象,则在您按OrderBy对其进行访问时,它将访问整个集合。 我假设它不是,它直接是您的DbSet或EF IQueryable (因此您使用Linq-To-Entities而不是Linq-To-Objects进行查询,并且对数据库的查询已完成排序,并且不在返回的整个集合上)。

除非需要更改跟踪检测,否则请在AsNoTracking上使用AsNoTracking (在这种情况下为Context.Images.AsNoTracking().OrderBy(...) ,这将DbSet降低内存需求(更改跟踪检测需要两倍的内存Context.Images.AsNoTracking().OrderBy(...) 。记忆)。

另外,如果使用大的Blob数据,将其存储在自己的表中(仅包含一个iddata )并仅在需要时访问它(在您要在其上的表/实体上引用此id )可能是明智的(如果您正在执行操作),如果您正在使用ORM并希望一直使用原始实体(也可以使用Select将查询投影到没有blob字段的新实体上)。

如果您需要一直访问返回的行的图像数据,而系统中没有足够的存储空间,那么运气不好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM