目前排序的时间超过3S 想改到3S一下 据说可以先把数据取出来放入一个集合中 不过在下实在不会改了。。
//从数据库服务器上获取当天设备加工参数信息
                for (int i = 0; i < listturn.Count; i++)
                {
                    itmHandleClient = 1234;
                    KepItem = KepItems.AddItem(listturn[i].ToString(), itmHandleClient);
                    itmHandleServer = KepItem.ServerHandle;
                } //排序
                string[] values = new string[262];                for (int i = 0; i < 262; i++)
                {
                    string itemID = "EA211.AF999.DB" + i.ToString();
                    foreach (OPCItem item in KepItems)
                    {
                        if (itemID == item.ItemID)
                        {
                            if (item.Value != null)
                            {
                                values[i] = item.Value.ToString();
                            }
                        }
                    }
                }排序C#.NET循环

解决方案 »

  1.   

    你这哪叫排序,就是个查找对应,你要想节约时间,就要对两个循环加以改进,比如KepItems先排序,这样KepItems就是有序的了,那么for循环中就不需要每次都从KepItems的开始遍历了,记录当前索引,下一次遍历从该索引处开始
      

  2.   

    for (int i = 0; i < 262; i++)
                    {
                        string itemID = "EA211.AF999.DB" + i.ToString();
                        foreach (OPCItem item in KepItems)
                        {
                            if (itemID == item.ItemID)
                            {
                                if (item.Value != null)
                                {
                                    values[i] = item.Value.ToString();
                                }
                                break;
                            }
                        }
                    } 用linq的
    var query = list.OrderBy(t => int.Parse(t.ItemID.Substring("EA211.AF999.DB".Length))).Select(t=>t.Value);
      

  3.   

     for (int i = 0; i < 262; i++)
                    {
                        string itemID = "EA211.AF999.DB" + i;
                        foreach (int j=KepItems.Length-1;j>=0;j-- )
                        {  
                            OPCItem item=KepItems[j];
                            if (itemID == item.ItemID&&item.Value != null)
                            {
                                    values[i] = item.Value.ToString();
                                    break;
                            }
                        }
                    }