Мне нужно работать с большим количеством данных в памяти. Я загружаю его из базы данных SQLite на SSD и использую EF6 для создания из него бизнес-объектов. Как только окно Process Memory показывает использование, превышающее 3,2 ГБ, я получаю исключение Out Of Memory из Entity Framework.
На данный момент я просто загружаю в списки. Я где-то читал, что существуют ограничения на размеры структур списков, поэтому вместо использования одного большого списка я создал несколько простых объектов-контейнеров DataBlock, каждый из которых содержит кусок необходимых данных. Кажется, это не имеет никакого значения. ПК имеет много оперативной памяти (16 ГБ). Я использую новый контекст для заполнения каждого блока данных, а затем уничтожаю их.
For Each DataBlock In DataBlocks
Using Context As New mainEntities
Dim FirstRecordTimeUTC As Long = TimeFunctions.ConvertDateToUTC(DataBlock.StartDate)
Dim LastRecordTimeUTC As Long = TimeFunctions.ConvertDateToUTC(DataBlock.EndDate)
Dim CandlesInRange = (From Cand In Context.HistoricalRecords
Where Cand.time_close_utc >= FirstRecordTimeUTC
Where Cand.time_close_utc <= LastRecordTimeUTC
Order By Cand.id
Select Cand).ToList
DataBlock.AllCandles = CandlesInRange
Dim RTsInRange = (From Cand In Context.HistoricalRecordRealTimes
Where Cand.time_close_utc >= FirstRecordTimeUTC
Where Cand.time_close_utc <= LastRecordTimeUTC
Order By Cand.id
Select Cand).ToList
DataBlock.AllRTs = RTsInRange
Dim StatsInRange = (From Cand In Context.InstrumentStats
Where Cand.time_close_utc >= FirstRecordTimeUTC
Where Cand.time_close_utc <= LastRecordTimeUTC
Order By Cand.id
Select Cand).ToList
DataBlock.AllStats = StatsInRange
End Using
Next
Платформа компилятора установлена на «Любой ЦП». Система работает следующим образом:
Win 10 64, VS 2017, 16 ГБ ОЗУ, Ryzen 5 3600
Любые мысли о том, что я делаю неправильно, будут высоко оценены.