有一堆结构组,初始化后数量2000个,每个结构中的m_szLabel值是不同的.        public struct RCV_REPORT_STRUCTExV3
        {
            public UInt16 m_cbSize;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
            public string m_szLabel;
        } 现在,我每秒钟收到几百个,上千个不等上面这种结构的更新数据,请注意,不是2000个结构的全部数据,而是其中任意的数量的,我需要把新的数据更新到对应的结构中,以 m_szLabel 的值相等作为判断条件.我现在用了一个比较笨的方法: 我把新收到的数据放到 newSTRUCTExV3[] 这个结构组中了                        for (int i = 0; i < 新收到结构的数量; i++)
                        {                            RCV_REPORT_STRUCTExV3[CodeToI(newSTRUCTExV3[i].m_szLabel)] = newSTRUCTExV3[i];                        }
查找对应初始化结构的函数如下:        public int CodeToI(string code)
        {
            int fi = 0;
            for (int si = 0; si < 2000; si++)
            {
                if (RCV_REPORT_STRUCTExV3[si].m_szLabel == code)
                {
                    fi = si;
                    break;
                }            }
            return fi;
        }
用了这种办法,虽然也能达到目的,但我觉得似乎效率低了点,我是新手,刚接触c#几天,请大家指点指点,有没有效率更高点的方法,因为要求处理数度快,有时候每秒种要处理上万个这样的更新.

解决方案 »

  1.   

    应该就这样了吧。看不懂你这几个数组嵌套使用的效果。不过猜测。估计你也琢磨了一阵子。对数组操作算是.net的原子操作了。
      

  2.   

    如果查找很频繁。我建议你用hashtable。RCV_REPORT_STRUCTExV3这个用HashTable,当然前提是查询和插入很频繁。
      

  3.   

    to wuyazhe(牛肉面):
    RCV_REPORT_STRUCTExV3[CodeToI(newSTRUCTExV3[i].m_szLabel)] = newSTRUCTExV3[i];你指的是这句吧?我说明一下:初始化的时候: RCV_REPORT_STRUCTExV3[2000] 这个结构组就存在了,每个里面都有数据;更新的时候,比如收到1800个,那么生成结构组: newSTRUCTExV3[1800],其中RCV_REPORT_STRUCTExV3 和 newSTRUCTExV3 的数据结构是相同的,假设newSTRUCTExV3[1].m_szLabel 和 RCV_REPORT_STRUCTExV3[8].m_szLabel 值相同的话赋值只要 RCV_REPORT_STRUCTExV3[8] = newSTRUCTExV3[1]; 就可以了.但我现在的问题就是出在,查找newSTRUCTExV3[1].m_szLabel 的值和初始化结构组中哪个结构的m_szLabel 值相同时,每次都需要遍历一遍,感觉方法比较笨.
      

  4.   

    to BlueTrees(蜗牛):我看了一下,hashtable 是不是用于 键/值对应的情况? 但我这个结构        public struct RCV_REPORT_STRUCTExV3
            {
                public UInt16 m_cbSize;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
                public string m_szLabel;
            } 不止两个成员,一共有十几个成员,为了方便大家看我简化了一下代码的.更新是非常频繁的,每秒钟可能更新上万个结构的数据,同一个结构的数据一秒钟内可能更新数次
      

  5.   

    是键值对应的,你不是有比较的内容吗?就把那个作为键,值嘛就是你的Record。他的值可以是任何类型的,现在你用的C#,记住了,不是用C++。改一下习惯,在C#里面是不大用数组的。