static int MeasureTupleVsKeyValuePairInDictionaryLookup() { const int iterations = 1000000; int ran = 0; var tupleMap = new DictionaryEx <Tuple <int, int, int, DateTime>, int>(200); var structMap = new DictionaryEx <StructTuple <int, int, int, DateTime>, int>(200); for (int i = 200 - 1; i >= 0; i--) { tupleMap.Add(new Tuple <int, int, int, DateTime>(400 - i, i + 1, i - 1, new DateTime(1990 + i % 10, 5, 2)), 0); structMap.Add(new StructTuple <int, int, int, DateTime>(400 - i, i + 1, i - 1, new DateTime(1990 + i % 10, 5, 2)), 0); } //CodeTimer.Time(true, "Tuple lookup", // iterations, // () => // { // int value; // if (tupleMap.TryGetValue(new Tuple<int, int, int, DateTime>(390, 11, 9, new DateTime(1990, 5, 2)), out value)) // ran += 1; // }); CodeTimer.Time(true, "Struct lookup outer add or update", iterations, () => { var key = new StructTuple <int, int, int, DateTime>(390, 11, 9, new DateTime(1990, 5, 2)); int a = 1; int value; if (structMap.TryGetValue(key, out value)) { structMap[key] = value + a; } else { structMap.Add(key, a); } ran += 1; }); CodeTimer.Time(true, "Struct lookup AddOrUpdate", iterations, () => { int a = 1; structMap.AddOrUpdate( new StructTuple <int, int, int, DateTime>(390, 11, 9, new DateTime(1990, 5, 2)), a, (k, cv, nv) => cv + nv); ran += 1; }); return(ran); }
static int MeasureTupleVsKeyValuePairInDictionaryLookup() { const int iterations = 1000000; int ran = 0; var tupleMap = new DictionaryEx<Tuple<int, int, int, DateTime>, int>(200); var structMap = new DictionaryEx<StructTuple<int, int, int, DateTime>, int>(200); for (int i = 200 - 1; i >= 0; i--) { tupleMap.Add(new Tuple<int, int, int, DateTime>(400 - i, i + 1, i - 1, new DateTime(1990 + i % 10, 5, 2)), 0); structMap.Add(new StructTuple<int, int, int, DateTime>(400 - i, i + 1, i - 1, new DateTime(1990 + i % 10, 5, 2)), 0); } //CodeTimer.Time(true, "Tuple lookup", // iterations, // () => // { // int value; // if (tupleMap.TryGetValue(new Tuple<int, int, int, DateTime>(390, 11, 9, new DateTime(1990, 5, 2)), out value)) // ran += 1; // }); CodeTimer.Time(true, "Struct lookup outer add or update", iterations, () => { var key = new StructTuple<int, int, int, DateTime>(390, 11, 9, new DateTime(1990, 5, 2)); int a = 1; int value; if (structMap.TryGetValue(key, out value)) structMap[key] = value + a; else structMap.Add(key, a); ran += 1; }); CodeTimer.Time(true, "Struct lookup AddOrUpdate", iterations, () => { int a = 1; structMap.AddOrUpdate( new StructTuple<int, int, int, DateTime>(390, 11, 9, new DateTime(1990, 5, 2)), a, (k, cv, nv) => cv + nv); ran += 1; }); return ran; }