Существует глобальный список новостей
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
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пытаюсь сделать программу, одной из важных частей которой, будет вывод информации по ходу её работыВ ходе работы программы, необходимые данные...
Есть картинка, у неё аттрибут onclick="todo();" Так вот, возможно ли при помощи jquery добавить к onclick аттрибуту определенные параметры, но сделать это...