[英]Working with a large amount of data
我以ORM身份獲得了c#應用和entity famework
。 我有帶有表Images
數據庫。 表具有Id
, TimeStamp
, Data
列。 該表可以包含很多實體。 另外, 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數據,將其存儲在自己的表中(僅包含一個id
和data
)並僅在需要時訪問它(在您要在其上的表/實體上引用此id
)可能是明智的(如果您正在執行操作),如果您正在使用ORM並希望一直使用原始實體(也可以使用Select
將查詢投影到沒有blob字段的新實體上)。
如果您需要一直訪問返回的行的圖像數據,而系統中沒有足夠的存儲空間,那么運氣不好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.