Вероятно, наиболее эффективным подходом является использование базы данных вместо загрузки всех в памяти (из любого места), а затем использовать Skip
/Take
принять ее части.
Однако, вы можете использовать GroupBy
:
var chunks = largeStringList.Select((str, index) => new { str, index })
.GroupBy(x => x.index/2000, x => x.str);
foreach (var chunkGroup in chunks)
Console.WriteLine(String.Join(",", chunkGroup));
Я запустить небольшой тест производительности с этим результатом:
List.GetRange
:
00:00:00.0404119 (40 milliseconds)
(мой) GroupBy
:
00:00:02.2386504 (two seconds)
Skip
/Take
:
00:10:11.6467726 (yes, more than 10 minutes)
Есть ли у вас что полный список в памяти, в буквальном смысле, как '' List? Можете ли вы просто использовать индексы? что ты уже испробовал? (В отличие от предыдущей версии этого комментария, похоже, что LINQ to Objects делает * not * optimize Skip, поэтому повторное использование Skip/Take будет медленным. Существуют различные другие LINQ-связанные параметры, хотя ...) –