public Result GetResult(string resultKey)
    {
        Result result = ResultContainer[resultKey];

        lock (_SyncLock)
        {
            int currentHits = result.Hits;

            if (PopularityContainer.ContainsKey(currentHits) && PopularityContainer[currentHits].Contains(result))
            {
                PopularityContainer[currentHits].Remove(result);
            }

            if (!PopularityContainer.ContainsKey(currentHits + 1))
            {
                PopularityContainer.Add(currentHits + 1, new List <Result>());
            }

            PopularityContainer[currentHits].Add(Result);

            if ((currentHits + 1) > MaxPopularity)
            {
                MaxPopularity = currentHits + 1;
            }
        }

        return(result);
    }
 public void WritePopularity()
 {
     //Here could also extract the keys to a List<Int32>, sort it, and walk that.
     for (int i = MaxPopularity; i >= 0; i--)
     {
         if (PopularityContainer.Contains(i) && PopularityContainer[i].Count > 0)
         {
             //NB the order of items at key[i] is the order in which they achieved their popularity
             foreach (Result result in PopularityContainer[i])
             {
                 Console.WriteLine(String.Format("{0} has had {1} hits", result.ToString(), i));
             }
         }
     }
 }