有一堆结构组,初始化后数量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#几天,请大家指点指点,有没有效率更高点的方法,因为要求处理数度快,有时候每秒种要处理上万个这样的更新.
{
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#几天,请大家指点指点,有没有效率更高点的方法,因为要求处理数度快,有时候每秒种要处理上万个这样的更新.
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 值相同时,每次都需要遍历一遍,感觉方法比较笨.
{
public UInt16 m_cbSize; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string m_szLabel;
} 不止两个成员,一共有十几个成员,为了方便大家看我简化了一下代码的.更新是非常频繁的,每秒钟可能更新上万个结构的数据,同一个结构的数据一秒钟内可能更新数次