示例#1
0
        private static long IntTreeGet <V>(Playground.IntHashTree <int, V> tree, int key, int times)
        {
            V   ignored   = default(V);
            var treeWatch = Stopwatch.StartNew();

            for (int i = 0; i < times; i++)
            {
                ignored = tree.GetValueOrDefault(key);
            }

            treeWatch.Stop();
            GC.KeepAlive(ignored);
            GC.Collect();
            return(treeWatch.ElapsedMilliseconds);
        }
示例#2
0
        private static long IntTreeAdd <V>(ref Playground.IntHashTree <int, V> tree, int[] keys, int key, V value)
        {
            var ignored  = default(V);
            var treeTime = Stopwatch.StartNew();

            for (var i = 0; i < keys.Length; i++)
            {
                Interlocked.Exchange(ref tree, tree.AddOrUpdate(keys[i], ignored));
            }

            Interlocked.Exchange(ref tree, tree.AddOrUpdate(key, value));

            treeTime.Stop();
            GC.Collect();
            return(treeTime.ElapsedMilliseconds);
        }
示例#3
0
        private static long HashTree4Add <V>(ref Playground.IntHashTree <Type, V> tree, Type[] keys, Type key, V value)
        {
            var ignored  = default(V);
            var treeTime = Stopwatch.StartNew();

            for (var i = 0; i < keys.Length; i++)
            {
                var k = keys[i];
                Interlocked.Exchange(ref tree, tree.AddOrUpdate(k, ignored));
            }

            Interlocked.Exchange(ref tree, tree.AddOrUpdate(key, value));

            treeTime.Stop();
            GC.KeepAlive(ignored);
            GC.Collect();
            return(treeTime.ElapsedMilliseconds);
        }