C# StopWatch的BUG????

本文通过对比测试int与string作为键的Dictionary查询效率, 发现两者性能相近, 均基于hash实现, 并且测试顺序对结果有一定影响。
       //BUG??????
        //使用StopWatch测试运行时间
        //两段测试A和B
        //测试结果受测试顺序影响,后测要比先测耗时长了许多
        static void TestKeyIntStr()
        {
            var idict = new Dictionary<int, string>();
            var sdict = new Dictionary<string, string>();

            for(int i=0; i<1000000; i++)
            {
                var key = i * 2 + 1;
                var v = i * i + "";
                idict.Add(key, v);
                sdict.Add(key + "", v);
            }

            //测试 A
            var timer = new Stopwatch();
            timer.Start();
            var it = idict[2001];
            var t1 = timer.ElapsedTicks;
            timer.Stop();

            //测试 B
            var timer2 = new Stopwatch();
            timer2.Start();
            var st = sdict["2001"];
            var t2 = timer2.ElapsedTicks;
            timer2.Stop();

            Console.WriteLine("t1: {0},t2:{1}", t1, t2);
        }

 补充说明:这应该是由于上面的计时都非常短,由于时间很短,短到几十个时钟周期(在我的机器上大约0.000001秒)时就会有误差了

通过上面的测试说明:对于dictionary的查询,string键和数值键效率几乎一样,应该是基于hash实现的

转载于:https://www.cnblogs.com/timeObjserver/p/8759789.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值