/// <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); }
/// <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); }