浏览:1972008-04-23 16:51   来自蓝色的风之精灵      :

之前我提到LumaQQ.net会出现index was outside the bounds of array这个错误,我查看了下报错的日志,发现很奇怪,大部分是在System.Collections.Generic.List`1.Clear() 或者System.Collections.Generic.List`1.Add(T item) 时出错的.

这个很奇怪,照理这两个方法都是.NET框架提供的方法,不应该报错的,难道是.NET框架本身的错误?

这个错误我没办法跟踪进去看看到底是哪里出的问题,因为大部分都要运行很长时间才会出现。

因此我想能不能规避使用List改用数组。

PS.我测试循环1亿次往List<int>里添加成员并Clear()耗时26秒,而用数组只要8秒,看来List的效率也是不如数组的

查看了代码发现,其实这个list一共只用了8个byte成员,因此,用八个元素的byte[]来代替这个List好了。

修改LumaQQ.NET.Utils.Crypter.cs

将private List<byte> baos;改为
        private byte[] baos=new byte[8];
        private int baosPos = 0;

修改WriteInt,改为

        private void WriteInt(uint t)
        {
            if (baosPos == 8)
                baosPos = 0;

            baos[baosPos] = (byte)((t & 0xff000000) >> 24);
            baosPos++;
            baos[baosPos] = (byte)((t & 0x00ff0000) >> 16);
            baosPos++;
            baos[baosPos] = (byte)((t & 0x0000ff00) >> 8);
            baosPos++;
            baos[baosPos] = (byte)(t & 0x000000ff);
            baosPos++;

        } 

最后将baos.Clear();注释掉,return baos.ToArray();改为return baos;注意有两处;

 

好了,我尝试编译后,正常登录,正常发消息,至于会不会再出现错误要等待时间验证……

一星期后再来报告结果

楼主
  3周前   阿不      :
嗯,你先测试下。
回复  1楼 回到顶楼 
  2周前   阿不      :
确实这里只要8个字节的数据组即可。
使用List多余了。
回复  2楼 回到顶楼 

你还不是小组成员,加入小组以后才能发布新主题!
> 返回“LumaQQ.NET”


其他话题

1 31040