я бы знал, есть ли лучшее решение для моего кода. Метод принимает в качестве параметра List, содержащий около 1000 2000 Link Object. Мне нужно разобрать их по id, набрать и вернуть список, который содержит 4 ссылки с id 1, 2 элемента с id2 ... и т.д ...
- Мой код ниже, может быть, это очень плохой код ... Есть ли способ
написать лучше с меньшим списком, который использует столько памяти?
- Другой вопрос: список response3, который я отправил в GetList, так как я
сказал, содержит 1000 2000 объектов и я храню в памяти, потому что мне нужно
это на всю жизнь программы, и я использую его примерно каждые 100 секунд.
По вашему мнению, я должен хранить в памяти или сохранить в файл и
читать каждые 100 секунд?
Обновление: За каждый раз, когда я вызываю этот метод, мне нужно получить только 10 15 элементов. 1000 - это минимальное, а 2000 - максимальное значение, которое может содержать response3.
// ответ содержит список из 1000 2000 ссылок, взятых из
// httpwebRequest и получить данные с веб-страницы XML-документа и разобрать их в список
public List<MainForm.Links> GetList(List<Links> response3)
{
listGoogle.Clear();
listYahoo.Clear();
listBing.Clear();
listOther.Clear();
//Other 4
var rnd = new Random();
var q = from a in response3.GroupBy(l => new { l.idHost, l.Type })
let col = a.ToList()
select col[rnd.Next(0, col.Count)];
foreach (Links str in q)
{
switch (str.idHost)
{
case 0:
listGoogle.Add(str);
break;
case 1:
listYahoo.Add(str);
break;
case 2:
listBing.Add(str);
break;
case 3
listOther.Add(str);
break;
//Other 4 list
}
}
var google = listGoogle.OrderBy(x => rnd.Next()).Take(4);
var yahoo = listYahoo.OrderBy(x => rnd.Next()).Take(2);
var Bing = listBing.OrderBy(x => rnd.Next()).Take(1);
var otherSeacher = listOtherSeacher.OrderBy(x => rnd.Next()).Take(1);
//Other same 4
tmp.Clear();
tmp = google.Where(h => h != null).ToList();
tmp.AddRange(yahoo.Where(h => h != null));
tmp.AddRange(bing.Where(h => h != null));
tmp.AddRange(other.Where(h => h != null));
.....other 4
return tmp;
}