从不同的List .net获取随机元素

时间:2012-01-24 21:34:03

标签: .net performance list random

我知道我的代码是否有更好的解决方案。该方法将包含大约1000个2000链接对象的List作为参数。我需要通过id解析它们,键入并返回一个列表,其中包含来自id 1的4个链接,来自id2的2个元素...等等...

  1. 我的代码可能是一个非常糟糕的代码...有没有办法 用更少的使用这么多内存的List来写得更好吗?
  2. 另一个问题:我发送给GetList的response3列表,就像我一样 说,包含1000 2000对象,我保留在内存中,因为我需要 它适用于程序的所有生命,我每100秒使用一次。 据你说,我应该留在内存中还是保存在文件中 每100秒阅读一次?
  3. 更新: 每次调用此方法时,我只需要获得10 15个元素。 1000是min,2000是response3可以包含的最大数字。

    // response包含从a获取的1000个2000链接的列表 // httpwebRequest并从XML Document网页获取数据并将其解析为列表

    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;
    }
    

0 个答案:

没有答案