我在项目中将接收到的数据包全放入数据包类DataModel集合list中,其中 Tnum 是线程编号,Pnum 是包编号,我需要将数据包按照顺序依次写入MyFileStream 中。
接收到数据包的速度很快,但是用的双重for循环后再嵌套foreach向MyFileStream 写入的速度太慢,有什么方法可以改进的??
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < list.Count; j++)
{
foreach (DataModel dm in list)
{
if (dm.Tnum == i)
{
if (dm.Pnum == j)
{
MyFileStream.Write(dm.Data, 0, dm.Data.Length);
list.Remove(dm);
break;
}
}
}
}
}
9 个解决方案
能序列化的话,直接序列化你的DataModel list
LZ,我想你可能还需要确定一下是检索数据慢还是写入文件慢。
如果是写入文件花的时间比较多(可以用一个静态的数据list来模拟),那么可以采用wuyazhe的方法。
如果是检索慢(可能由于线程同步、数据同步保护等原因造成的等待),那么需要找到慢的地方。
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < list.Count; j++)
{
if(list[j].Tnum==1 && list[j].Pnum==j)
{
bytes.AddRange(dm.Data);
list.Remove(dm);
}
}
}