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); }
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); }
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); }