Ejemplo n.º 1
0
        /// <summary>
        /// Find a "relatively" unused disk element, but not the element just added.
        /// </summary>
        /// <returns>DiskElement.</returns>
        private DiskElement FindRelativelyUnused()
        {
            IMetaData[] elements = DiskStore.SampleElements(_diskElements);
            IMetaData   element  = LfuPolicy.LeastHit(elements, null);

            return((DiskElement)element);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Uses random numbers to sample the entire map.
        /// </summary>
        /// <param name="diskElements">Elements.</param>
        /// <returns>An array of sampled elements.</returns>
        private static IMetaData[] SampleElements(Dictionary <object, DiskElement> diskElements)
        {
            int[]         offsets  = LfuPolicy.GenerateRandomSample(diskElements.Count);
            DiskElement[] elements = new DiskElement[offsets.Length];
            Dictionary <object, DiskElement> .Enumerator enumerator = diskElements.GetEnumerator();
            for (int i = 0; i < offsets.Length; i++)
            {
                for (int j = 0; j <= offsets[i]; j++)
                {
                    enumerator.MoveNext();
                }

                elements[i] = enumerator.Current.Value;
            }

            return(elements);
        }