private static long TreeGet <T>(Playground.HashTree <Type, T> tree, Type key, int times) { T ignored = default(T); 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 TreeAdd <V>(ref Playground.HashTree <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); }