簡體   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