public void Profile_Enumerations_Using_Nested_Loops()
        {
            var parents = new LoggingEnumerable<Parent>(_parents, ParentsLog);
            var children = new LoggingEnumerable<Child>(_children, ChildrenLog);

            var codes = new List<int>();
            foreach (Parent parent in parents)
            {
                Guid parentId = parent.Id;
                IEnumerable<Child> ptc = children.Where(x => x.ParentId == parentId);
                foreach (Child child in ptc)
                {
                    int hash = ComputeHash(child, parent);
                    codes.Add(hash);
                }
            }

            Console.WriteLine("{0} computations completed.", codes.Count);
            foreach (var kvp in _childrenLog)
            {
                Console.WriteLine("Children_{0}:{1}", kvp.Key, kvp.Value);
            }
            foreach (var kvp in _parentLog)
            {
                Console.WriteLine("Parent_{0}:{1}", kvp.Key, kvp.Value);
            }
        }
        public void Profile_Enumerations_Using_Linq_Join()
        {
            var parents = new LoggingEnumerable<Parent>(_parents, ParentsLog);
            var children = new LoggingEnumerable<Child>(_children, ChildrenLog);

            IEnumerable<int> ptc = from p in parents
                join c in children
                    on p.Id equals c.ParentId
                select ComputeHash(p, c);

            List<int> codes = ptc.ToList();

            Console.WriteLine("{0} computations completed.", codes.Count);
            foreach (var kvp in _childrenLog)
            {
                Console.WriteLine("Children_{0}:{1}", kvp.Key, kvp.Value);
            }
            foreach (var kvp in _parentLog)
            {
                Console.WriteLine("Parent_{0}:{1}", kvp.Key, kvp.Value);
            }
        }