//private static long IntGet(ImTreeArray store, int key, int times) //{ // object ignored = "ignored"; // var treeWatch = Stopwatch.StartNew(); // for (int i = 0; i < times; i++) // ignored = store.Get(key); // treeWatch.Stop(); // GC.KeepAlive(ignored); // GC.Collect(); // return treeWatch.ElapsedMilliseconds; //} private static long IntTreeV2Get <V>(HashTreeV2 <V> tree, int key, int times) { V ignored = default(V); var treeWatch = Stopwatch.StartNew(); for (int i = 0; i < times; i++) { ignored = tree.TryGet(key); } treeWatch.Stop(); GC.KeepAlive(ignored); GC.Collect(); return(treeWatch.ElapsedMilliseconds); }
//private static long IntAdd(ref ImTreeArray store, int[] keys, string value) //{ // const string ignored = ""; // var treeTime = Stopwatch.StartNew(); // for (var i = 0; i < keys.Length; i++) // Interlocked.Exchange(ref store, store.Append(ignored + i)); // Interlocked.Exchange(ref store, store.Append(value)); // treeTime.Stop(); // GC.Collect(); // return treeTime.ElapsedMilliseconds; //} //private static long IntAdd(ref IntTree<string> tree, int[] keys, int key, string value) //{ // var ignored = "ignored"; // 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 IntTreeV2Add <V>(ref HashTreeV2 <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); }