Существует глобальный список новостей
List<NewsItem> allNews = new List<NewsItem>();
Мне нужно взять все эти новости, отсортировать по дате, не трогая глобальный список, и вывести какой-то диапазон, что я и делаю.
var sortedNews = sortedByDate ? allNews.OrderBy(x => x.CreationDate).ToList() :
allNews.OrderByDescending(x => x.CreationDate).ToList();
var articleRange = sortedNews.GetRange(firstIndex, itemsCount);
операция копирования+сортировка занимает слишком много памяти. Можно ли как-то уменьшить размер используемых ресурсов?
Ресурсы выделяются в момент вызова ToList, соответственно нужно убрать лишние вызовы.
Код можно сделать красивее
var articleRange = allNews
.OrderBy(x => x.CreationDate, !sortedByDate)
.Skip(firstIndex-1)
.Take(itemsCount)
.ToList();
Для этого нужно добавить свой метод расширения
public static class LinqExtensions
{
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
bool isDesc = false
)
{
return isDesc ? source.OrderByDescending(keySelector) : source.OrderBy(keySelector);
}
}
Используйте Skip и Take:
var sortedNews = (sortedByDate ? allNews.OrderBy(x => x.CreationDate) :
allNews.OrderByDescending(x => x.CreationDate))
.Skip(firstIndex-1).Take(itemsCount).ToList();
Так ты берешь и создаешь еще одну копию своих данных. Следовательно потребляешь в два раза больше памяти. Обойдись без .ToList(), так у тебя будет только IEnumerable, далее работай с ним. Пройдись циклом по нему и добавляй нужные записи в articleRange. https://msdn.microsoft.com/ru-ru/library/bb534966(v=vs.110).aspx
Либо пробуй использовать LINQ https://metanit.com/sharp/tutorial/15.3.php
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости